diff --git a/asterixdb/LICENSE b/asterixdb/LICENSE
index 7c968b8..7d7f90a 100644
--- a/asterixdb/LICENSE
+++ b/asterixdb/LICENSE
@@ -311,733 +311,6 @@
    Source files in asterix-hivecompat are derived from portions of Apache Hive
    Query Language v0.13.0 (org.apache.hive:hive-exec).
 ---
-   Portions of the File Saver portions of the AsterixDB Dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.ts,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT license :
----
-   The MIT License
-
-   Copyright © 2016 Eli Grey.
-
-   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.
----
-   Portions of the ReactiveX/rxjs
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under Apache License 2.0:
----
-                                  Apache License
-                            Version 2.0, January 2004
-                         http://www.apache.org/licenses/
-
-    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-    1. Definitions.
-
-       "License" shall mean the terms and conditions for use, reproduction,
-       and distribution as defined by Sections 1 through 9 of this document.
-
-       "Licensor" shall mean the copyright owner or entity authorized by
-       the copyright owner that is granting the License.
-
-       "Legal Entity" shall mean the union of the acting entity and all
-       other entities that control, are controlled by, or are under common
-       control with that entity. For the purposes of this definition,
-       "control" means (i) the power, direct or indirect, to cause the
-       direction or management of such entity, whether by contract or
-       otherwise, or (ii) ownership of fifty percent (50%) or more of the
-       outstanding shares, or (iii) beneficial ownership of such entity.
-
-       "You" (or "Your") shall mean an individual or Legal Entity
-       exercising permissions granted by this License.
-
-       "Source" form shall mean the preferred form for making modifications,
-       including but not limited to software source code, documentation
-       source, and configuration files.
-
-       "Object" form shall mean any form resulting from mechanical
-       transformation or translation of a Source form, including but
-       not limited to compiled object code, generated documentation,
-       and conversions to other media types.
-
-       "Work" shall mean the work of authorship, whether in Source or
-       Object form, made available under the License, as indicated by a
-       copyright notice that is included in or attached to the work
-       (an example is provided in the Appendix below).
-
-       "Derivative Works" shall mean any work, whether in Source or Object
-       form, that is based on (or derived from) the Work and for which the
-       editorial revisions, annotations, elaborations, or other modifications
-       represent, as a whole, an original work of authorship. For the purposes
-       of this License, Derivative Works shall not include works that remain
-       separable from, or merely link (or bind by name) to the interfaces of,
-       the Work and Derivative Works thereof.
-
-       "Contribution" shall mean any work of authorship, including
-       the original version of the Work and any modifications or additions
-       to that Work or Derivative Works thereof, that is intentionally
-       submitted to Licensor for inclusion in the Work by the copyright owner
-       or by an individual or Legal Entity authorized to submit on behalf of
-       the copyright owner. For the purposes of this definition, "submitted"
-       means any form of electronic, verbal, or written communication sent
-       to the Licensor or its representatives, including but not limited to
-       communication on electronic mailing lists, source code control systems,
-       and issue tracking systems that are managed by, or on behalf of, the
-       Licensor for the purpose of discussing and improving the Work, but
-       excluding communication that is conspicuously marked or otherwise
-       designated in writing by the copyright owner as "Not a Contribution."
-
-       "Contributor" shall mean Licensor and any individual or Legal Entity
-       on behalf of whom a Contribution has been received by Licensor and
-       subsequently incorporated within the Work.
-
-    2. Grant of Copyright License. Subject to the terms and conditions of
-       this License, each Contributor hereby grants to You a perpetual,
-       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-       copyright license to reproduce, prepare Derivative Works of,
-       publicly display, publicly perform, sublicense, and distribute the
-       Work and such Derivative Works in Source or Object form.
-
-    3. Grant of Patent License. Subject to the terms and conditions of
-       this License, each Contributor hereby grants to You a perpetual,
-       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-       (except as stated in this section) patent license to make, have made,
-       use, offer to sell, sell, import, and otherwise transfer the Work,
-       where such license applies only to those patent claims licensable
-       by such Contributor that are necessarily infringed by their
-       Contribution(s) alone or by combination of their Contribution(s)
-       with the Work to which such Contribution(s) was submitted. If You
-       institute patent litigation against any entity (including a
-       cross-claim or counterclaim in a lawsuit) alleging that the Work
-       or a Contribution incorporated within the Work constitutes direct
-       or contributory patent infringement, then any patent licenses
-       granted to You under this License for that Work shall terminate
-       as of the date such litigation is filed.
-
-    4. Redistribution. You may reproduce and distribute copies of the
-       Work or Derivative Works thereof in any medium, with or without
-       modifications, and in Source or Object form, provided that You
-       meet the following conditions:
-
-       (a) You must give any other recipients of the Work or
-           Derivative Works a copy of this License; and
-
-       (b) You must cause any modified files to carry prominent notices
-           stating that You changed the files; and
-
-       (c) You must retain, in the Source form of any Derivative Works
-           that You distribute, all copyright, patent, trademark, and
-           attribution notices from the Source form of the Work,
-           excluding those notices that do not pertain to any part of
-           the Derivative Works; and
-
-       (d) If the Work includes a "NOTICE" text file as part of its
-           distribution, then any Derivative Works that You distribute must
-           include a readable copy of the attribution notices contained
-           within such NOTICE file, excluding those notices that do not
-           pertain to any part of the Derivative Works, in at least one
-           of the following places: within a NOTICE text file distributed
-           as part of the Derivative Works; within the Source form or
-           documentation, if provided along with the Derivative Works; or,
-           within a display generated by the Derivative Works, if and
-           wherever such third-party notices normally appear. The contents
-           of the NOTICE file are for informational purposes only and
-           do not modify the License. You may add Your own attribution
-           notices within Derivative Works that You distribute, alongside
-           or as an addendum to the NOTICE text from the Work, provided
-           that such additional attribution notices cannot be construed
-           as modifying the License.
-
-       You may add Your own copyright statement to Your modifications and
-       may provide additional or different license terms and conditions
-       for use, reproduction, or distribution of Your modifications, or
-       for any such Derivative Works as a whole, provided Your use,
-       reproduction, and distribution of the Work otherwise complies with
-       the conditions stated in this License.
-
-    5. Submission of Contributions. Unless You explicitly state otherwise,
-       any Contribution intentionally submitted for inclusion in the Work
-       by You to the Licensor shall be under the terms and conditions of
-       this License, without any additional terms or conditions.
-       Notwithstanding the above, nothing herein shall supersede or modify
-       the terms of any separate license agreement you may have executed
-       with Licensor regarding such Contributions.
-
-    6. Trademarks. This License does not grant permission to use the trade
-       names, trademarks, service marks, or product names of the Licensor,
-       except as required for reasonable and customary use in describing the
-       origin of the Work and reproducing the content of the NOTICE file.
-
-    7. Disclaimer of Warranty. Unless required by applicable law or
-       agreed to in writing, Licensor provides the Work (and each
-       Contributor provides its Contributions) on an "AS IS" BASIS,
-       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-       implied, including, without limitation, any warranties or conditions
-       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-       PARTICULAR PURPOSE. You are solely responsible for determining the
-       appropriateness of using or redistributing the Work and assume any
-       risks associated with Your exercise of permissions under this License.
-
-    8. Limitation of Liability. In no event and under no legal theory,
-       whether in tort (including negligence), contract, or otherwise,
-       unless required by applicable law (such as deliberate and grossly
-       negligent acts) or agreed to in writing, shall any Contributor be
-       liable to You for damages, including any direct, indirect, special,
-       incidental, or consequential damages of any character arising as a
-       result of this License or out of the use or inability to use the
-       Work (including but not limited to damages for loss of goodwill,
-       work stoppage, computer failure or malfunction, or any and all
-       other commercial damages or losses), even if such Contributor
-       has been advised of the possibility of such damages.
-
-    9. Accepting Warranty or Additional Liability. While redistributing
-       the Work or Derivative Works thereof, You may choose to offer,
-       and charge a fee for, acceptance of support, warranty, indemnity,
-       or other liability obligations and/or rights consistent with this
-       License. However, in accepting such obligations, You may act only
-       on Your own behalf and on Your sole responsibility, not on behalf
-       of any other Contributor, and only if You agree to indemnify,
-       defend, and hold each Contributor harmless for any liability
-       incurred by, or claims asserted against, such Contributor by reason
-       of your accepting any such warranty or additional liability.
-
-    END OF TERMS AND CONDITIONS
-
-    APPENDIX: How to apply the Apache License to your work.
-
-       To apply the Apache License to your work, attach the following
-       boilerplate notice, with the fields enclosed by brackets "[]"
-       replaced with your own identifying information. (Don't include
-       the brackets!)  The text should be enclosed in the appropriate
-       comment syntax for the file format. We also recommend that a
-       file or class name and description of purpose be included on the
-       same "printed page" as the copyright notice for easier
-       identification within third-party archives.
-
-    Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-   limitations under the License.
----
-   Portions of the PrimeNG components of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   The MIT License (MIT)
-
-   Copyright (c) 2016-2017 PrimeTek
-
-   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.
----
-   Portions of the NGRX portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/,
-         asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js,
-         asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle,
-         asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js,
-         asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js,
-         asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static/index.html
-
-   are available under The MIT License:
----
-   The MIT License (MIT)
-
-   Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-   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.
----
-   Portions of the Codemirror portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
-
-   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.
----
-   Portions of the AngularJS portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   The MIT License
-
-   Copyright (c) 2014-2017 Google, Inc. http://angular.io
-
-   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.
----
-   Portions of the Angular Material and HammerJS portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/,
-         asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts,
-         asterix-dashboard/src/main/resources/dashboard/src/main.ts,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (c) 2017 Google LLC.
-
-   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.
----
-   Portions of the CoreJS portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (c) 2014-2017 Denis Pushkarev
-
-   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.
----
-   Portions of the Roboto Font portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/index.html,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under Apache License 2.0:
----
-                                    Apache License
-                              Version 2.0, January 2004
-                           http://www.apache.org/licenses/
-
-      TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-      1. Definitions.
-
-         "License" shall mean the terms and conditions for use, reproduction,
-         and distribution as defined by Sections 1 through 9 of this document.
-
-         "Licensor" shall mean the copyright owner or entity authorized by
-         the copyright owner that is granting the License.
-
-         "Legal Entity" shall mean the union of the acting entity and all
-         other entities that control, are controlled by, or are under common
-         control with that entity. For the purposes of this definition,
-         "control" means (i) the power, direct or indirect, to cause the
-         direction or management of such entity, whether by contract or
-         otherwise, or (ii) ownership of fifty percent (50%) or more of the
-         outstanding shares, or (iii) beneficial ownership of such entity.
-
-         "You" (or "Your") shall mean an individual or Legal Entity
-         exercising permissions granted by this License.
-
-         "Source" form shall mean the preferred form for making modifications,
-         including but not limited to software source code, documentation
-         source, and configuration files.
-
-         "Object" form shall mean any form resulting from mechanical
-         transformation or translation of a Source form, including but
-         not limited to compiled object code, generated documentation,
-         and conversions to other media types.
-
-         "Work" shall mean the work of authorship, whether in Source or
-         Object form, made available under the License, as indicated by a
-         copyright notice that is included in or attached to the work
-         (an example is provided in the Appendix below).
-
-         "Derivative Works" shall mean any work, whether in Source or Object
-         form, that is based on (or derived from) the Work and for which the
-         editorial revisions, annotations, elaborations, or other modifications
-         represent, as a whole, an original work of authorship. For the purposes
-         of this License, Derivative Works shall not include works that remain
-         separable from, or merely link (or bind by name) to the interfaces of,
-         the Work and Derivative Works thereof.
-
-         "Contribution" shall mean any work of authorship, including
-         the original version of the Work and any modifications or additions
-         to that Work or Derivative Works thereof, that is intentionally
-         submitted to Licensor for inclusion in the Work by the copyright owner
-         or by an individual or Legal Entity authorized to submit on behalf of
-         the copyright owner. For the purposes of this definition, "submitted"
-         means any form of electronic, verbal, or written communication sent
-         to the Licensor or its representatives, including but not limited to
-         communication on electronic mailing lists, source code control systems,
-         and issue tracking systems that are managed by, or on behalf of, the
-         Licensor for the purpose of discussing and improving the Work, but
-         excluding communication that is conspicuously marked or otherwise
-         designated in writing by the copyright owner as "Not a Contribution."
-
-         "Contributor" shall mean Licensor and any individual or Legal Entity
-         on behalf of whom a Contribution has been received by Licensor and
-         subsequently incorporated within the Work.
-
-      2. Grant of Copyright License. Subject to the terms and conditions of
-         this License, each Contributor hereby grants to You a perpetual,
-         worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-         copyright license to reproduce, prepare Derivative Works of,
-         publicly display, publicly perform, sublicense, and distribute the
-         Work and such Derivative Works in Source or Object form.
-
-      3. Grant of Patent License. Subject to the terms and conditions of
-         this License, each Contributor hereby grants to You a perpetual,
-         worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-         (except as stated in this section) patent license to make, have made,
-         use, offer to sell, sell, import, and otherwise transfer the Work,
-         where such license applies only to those patent claims licensable
-         by such Contributor that are necessarily infringed by their
-         Contribution(s) alone or by combination of their Contribution(s)
-         with the Work to which such Contribution(s) was submitted. If You
-         institute patent litigation against any entity (including a
-         cross-claim or counterclaim in a lawsuit) alleging that the Work
-         or a Contribution incorporated within the Work constitutes direct
-         or contributory patent infringement, then any patent licenses
-         granted to You under this License for that Work shall terminate
-         as of the date such litigation is filed.
-
-      4. Redistribution. You may reproduce and distribute copies of the
-         Work or Derivative Works thereof in any medium, with or without
-         modifications, and in Source or Object form, provided that You
-         meet the following conditions:
-
-         (a) You must give any other recipients of the Work or
-             Derivative Works a copy of this License; and
-
-         (b) You must cause any modified files to carry prominent notices
-             stating that You changed the files; and
-
-         (c) You must retain, in the Source form of any Derivative Works
-             that You distribute, all copyright, patent, trademark, and
-             attribution notices from the Source form of the Work,
-             excluding those notices that do not pertain to any part of
-             the Derivative Works; and
-
-         (d) If the Work includes a "NOTICE" text file as part of its
-             distribution, then any Derivative Works that You distribute must
-             include a readable copy of the attribution notices contained
-             within such NOTICE file, excluding those notices that do not
-             pertain to any part of the Derivative Works, in at least one
-             of the following places: within a NOTICE text file distributed
-             as part of the Derivative Works; within the Source form or
-             documentation, if provided along with the Derivative Works; or,
-             within a display generated by the Derivative Works, if and
-             wherever such third-party notices normally appear. The contents
-             of the NOTICE file are for informational purposes only and
-             do not modify the License. You may add Your own attribution
-             notices within Derivative Works that You distribute, alongside
-             or as an addendum to the NOTICE text from the Work, provided
-             that such additional attribution notices cannot be construed
-             as modifying the License.
-
-         You may add Your own copyright statement to Your modifications and
-         may provide additional or different license terms and conditions
-         for use, reproduction, or distribution of Your modifications, or
-         for any such Derivative Works as a whole, provided Your use,
-         reproduction, and distribution of the Work otherwise complies with
-         the conditions stated in this License.
-
-      5. Submission of Contributions. Unless You explicitly state otherwise,
-         any Contribution intentionally submitted for inclusion in the Work
-         by You to the Licensor shall be under the terms and conditions of
-         this License, without any additional terms or conditions.
-         Notwithstanding the above, nothing herein shall supersede or modify
-         the terms of any separate license agreement you may have executed
-         with Licensor regarding such Contributions.
-
-      6. Trademarks. This License does not grant permission to use the trade
-         names, trademarks, service marks, or product names of the Licensor,
-         except as required for reasonable and customary use in describing the
-         origin of the Work and reproducing the content of the NOTICE file.
-
-      7. Disclaimer of Warranty. Unless required by applicable law or
-         agreed to in writing, Licensor provides the Work (and each
-         Contributor provides its Contributions) on an "AS IS" BASIS,
-         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-         implied, including, without limitation, any warranties or conditions
-         of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-         PARTICULAR PURPOSE. You are solely responsible for determining the
-         appropriateness of using or redistributing the Work and assume any
-         risks associated with Your exercise of permissions under this License.
-
-      8. Limitation of Liability. In no event and under no legal theory,
-         whether in tort (including negligence), contract, or otherwise,
-         unless required by applicable law (such as deliberate and grossly
-         negligent acts) or agreed to in writing, shall any Contributor be
-         liable to You for damages, including any direct, indirect, special,
-         incidental, or consequential damages of any character arising as a
-         result of this License or out of the use or inability to use the
-         Work (including but not limited to damages for loss of goodwill,
-         work stoppage, computer failure or malfunction, or any and all
-         other commercial damages or losses), even if such Contributor
-         has been advised of the possibility of such damages.
-
-      9. Accepting Warranty or Additional Liability. While redistributing
-         the Work or Derivative Works thereof, You may choose to offer,
-         and charge a fee for, acceptance of support, warranty, indemnity,
-         or other liability obligations and/or rights consistent with this
-         License. However, in accepting such obligations, You may act only
-         on Your own behalf and on Your sole responsibility, not on behalf
-         of any other Contributor, and only if You agree to indemnify,
-         defend, and hold each Contributor harmless for any liability
-         incurred by, or claims asserted against, such Contributor by reason
-         of your accepting any such warranty or additional liability.
-
-      END OF TERMS AND CONDITIONS
-
-      APPENDIX: How to apply the Apache License to your work.
-
-         To apply the Apache License to your work, attach the following
-         boilerplate notice, with the fields enclosed by brackets "[]"
-         replaced with your own identifying information. (Don't include
-         the brackets!)  The text should be enclosed in the appropriate
-         comment syntax for the file format. We also recommend that a
-         file or class name and description of purpose be included on the
-         same "printed page" as the copyright notice for easier
-         identification within third-party archives.
-
-      Copyright [yyyy] [name of copyright owner]
-
-      Licensed under the Apache License, Version 2.0 (the "License");
-      you may not use this file except in compliance with the License.
-      You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-      Unless required by applicable law or agreed to in writing, software
-      distributed under the License is distributed on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-      See the License for the specific language governing permissions and
-   limitations under the License.
----
-
-   Portions of the Font Awesome portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/index.html,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static/index.html
-
-   are available under The MIT License:
----
-   http://fontawesome.io/license/ Applies to all CSS and LESS files in the
-   following directories if exist: font-awesome/css/, font-awesome/less/, and
-   font-awesome/scss/.  and downloaded from CDN network services and loaded in
-   index.html License: MIT License URL:
-   http://opensource.org/licenses/mit-license.html
----
-   Portions of the webpack portions of the AsterixDB dashboard
-       located at:
-       and
-         asterix-dashboard/src/main/resources/dashboard/
-
-   are available under The MIT License:
----
-   Copyright JS Foundation and other contributors
-
-   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.
----
-   Portions of the zonejs portions of the AsterixDB dashboard
-       located at:
-         asterix-dashboard/src/main/resources/dashboard/src/,
-       and
-         asterix-dashboard/src/main/resources/dashboard/static
-
-   are available under The MIT License:
----
-   Copyright (c) 2016 Google, Inc.
-
-   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.
----
    Portions of the AsterixDB API examples
        located at:
          asterix-examples/src/main/resources/admaql101-demo/bottle.py,
diff --git a/asterixdb/asterix-dashboard/pom.xml b/asterixdb/asterix-dashboard/pom.xml
index 7e49934..b4ad088 100644
--- a/asterixdb/asterix-dashboard/pom.xml
+++ b/asterixdb/asterix-dashboard/pom.xml
@@ -29,6 +29,7 @@
 
   <properties>
     <root.dir>${basedir}/..</root.dir>
+    <node.path>${user.home}/.node</node.path>
   </properties>
 
   <dependencies>
@@ -75,11 +76,184 @@
               <excludes combine.children="append">
                 <exclude>src/main/resources/dashboard/static/*
                 </exclude>
+                <exclude>src/main/resources/licenses/*
+                </exclude>
+                <exclude>src/node/**
+                </exclude>
               </excludes>
             </configuration>
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>com.github.eirslett</groupId>
+        <artifactId>frontend-maven-plugin</artifactId>
+        <configuration>
+          <nodeVersion>v8.11.2</nodeVersion>
+          <npmVersion>6.0.1</npmVersion>
+          <workingDirectory>target/dashboard</workingDirectory>
+          <installDirectory>target/dashboard</installDirectory>
+        </configuration>
+        <executions>
+          <execution>
+            <id>install node and yarn</id>
+            <goals>
+              <goal>install-node-and-npm</goal>
+            </goals>
+            <phase>generate-resources</phase>
+          </execution>
+          <execution>
+            <id>npm install</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>npm</goal>
+            </goals>
+            <configuration>
+              <arguments>install --no-optional</arguments>
+            </configuration>
+          </execution>
+          <execution>
+            <id>npm run-script mavenbuild</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>npm</goal>
+            </goals>
+            <configuration>
+              <arguments>run-script mavenbuild</arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.7</version>
+        <executions>
+          <execution>
+            <id>copy-resource-one</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/src/main/resources/licenses
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/target/dashboard/static/
+                  </directory>
+                  <includes>
+                    <include>3rdpartylicenses.txt</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-license</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/src/main/resources/META-INF/
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>
+                    ${basedir}/target/generated-sources/
+                  </directory>
+                  <includes>
+                    <include>LICENSE</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-static</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/target/classes/dashboard/static
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/target/node/static/
+                  </directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-node</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>
+                ${basedir}/target/dashboard
+              </outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/src/node
+                  </directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>3.1.0</version>
+        <configuration>
+          <includes>
+            <include>**/dashboard/**</include>
+            <include>**/*.class</include>
+            <include>**/META-INF/*</include>
+          </includes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.hyracks</groupId>
+        <artifactId>license-automation-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <templateRootDir>${basedir}/src/main/resources/licenses
+          </templateRootDir>
+          <generatedFiles>
+            <generatedFile>
+              <template>dashboard-license.ftl</template>
+              <outputFile>LICENSE</outputFile>
+            </generatedFile>
+          </generatedFiles>
+          <location>repo/</location>
+          <timeoutSecs>10</timeoutSecs>
+          <downloadDir>
+            ${project.build.directory}/generated-resources/license
+          </downloadDir>
+          <excludedScopes>
+            <excludedScope>test</excludedScope>
+          </excludedScopes>
+          <licenseDirectory>
+            ${basedir}/src/main/resources/licenses/content
+          </licenseDirectory>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt
deleted file mode 100644
index 03758a4..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt
+++ /dev/null
@@ -1,222 +0,0 @@
-@angular/animations@5.1.1
-MIT
-MIT
-
-@angular/common@5.1.1
-MIT
-MIT
-
-@angular/core@5.1.1
-MIT
-MIT
-
-@angular/platform-browser@5.1.1
-MIT
-MIT
-
-@ngrx/store-devtools@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-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.
-
-codemirror@5.32.0
-MIT
-MIT License
-
-Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
-
-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.
-
-core-js@2.5.3
-MIT
-Copyright (c) 2014-2017 Denis Pushkarev
-
-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.
-
-file-saver@1.3.3
-MIT
-The MIT License
-
-Copyright © 2016 [Eli Grey][1].
-
-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.
-
-  [1]: http://eligrey.com
-
-hammerjs@2.0.8
-MIT
-The MIT License (MIT)
-
-Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
-
-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.
-
-primeng@4.3.0
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2016-2017 PrimeTek
-
-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.
-
-@angular/forms@5.1.1
-MIT
-MIT
-
-@ngrx/store@4.1.1
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-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.
-
-webpack@3.8.1
-MIT
-Copyright JS Foundation and other contributors
-
-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.
-
-zone.js@0.8.18
-MIT
-The MIT License
-
-Copyright (c) 2016 Google, Inc.
-
-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.
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png
deleted file mode 100644
index 0fa2ff0..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/assets/asterixdb_tm.png
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png
deleted file mode 100644
index 561cdd9..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico
deleted file mode 100644
index 282c28d..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html
deleted file mode 100644
index c34009b..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--/*
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/--><!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><title>AsterixDb Administration Console</title><base href="/dashboard/static/"><link rel="icon" type="image/x-icon" href="favicon.ico"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"><link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><link href="styles.9f50282210bba5318775.bundle.css" rel="stylesheet"/></head><body><awc-root></awc-root><script type="text/javascript" src="inline.66bd6b83f86cf773a001.bundle.js"></script><script type="text/javascript" src="polyfills.32ca5670d6503e090789.bundle.js"></script><script type="text/javascript" src="scripts.da68998bdd77aff4e764.bundle.js"></script><script type="text/javascript" src="main.37b7b7cad656490b195a.bundle.js"></script></body></html>
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
deleted file mode 100644
index 1868b98..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var u,i,f,l=0,s=[];l<t.length;l++)o[i=t[l]]&&s.push(o[i][0]),o[i]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(r&&r(t,c,a);s.length;)s.shift()();if(a)for(l=0;l<a.length;l++)f=n(n.s=a[l]);return f};var t={},o={3:0};n.e=function(e){function r(){u.onerror=u.onload=null,clearTimeout(i);var n=o[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}var t=o[e];if(0===t)return new Promise(function(e){e()});if(t)return t[2];var c=new Promise(function(n,r){t=o[e]=[n,r]});t[2]=c;var a=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,n.nc&&u.setAttribute("nonce",n.nc),u.src=n.p+""+e+"."+{0:"37b7b7cad656490b195a",1:"32ca5670d6503e090789",2:"bd9c51474f663c9da388"}[e]+".chunk.js";var i=setTimeout(r,12e4);return u.onerror=u.onload=r,a.appendChild(u),c},n.m=e,n.c=t,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif
deleted file mode 100644
index 64e2280..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
deleted file mode 100644
index 43d0410..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([0],{"+GRi":function(e,t,n){var r=n("Wo2w"),i=n("Wy9r");e.exports=function(e){return r(i(e))}},"+iEx":function(e,t,n){n("fHxy"),n("5GJ3"),n("X0O/"),n("HCkn"),n("ncNB"),n("soMw"),n("8sYH"),n("IJ3P"),n("t6ta"),e.exports=n("b4gG").Reflect},"+pQw":function(e,t,n){var r=n("JXkd");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},"/zAi":function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("Un6q"),a=n("LMZF"),s=function(){};s=r([a.Component({selector:"p-header",template:"<ng-content></ng-content>"})],s),t.Header=s;var u=function(){};u=r([a.Component({selector:"p-footer",template:"<ng-content></ng-content>"})],u),t.Footer=u;var c=function(){function e(e){this.template=e}return e.prototype.getType=function(){return this.name},e}();r([o.Input(),i("design:type",String)],c.prototype,"type",void 0),r([o.Input("pTemplate"),i("design:type",String)],c.prototype,"name",void 0),c=r([o.Directive({selector:"[pTemplate]",host:{}})],c),t.PrimeTemplate=c;var d=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.templateRef,{$implicit:this.item,index:this.index})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],d.prototype,"item",void 0),r([o.Input(),i("design:type",Number)],d.prototype,"index",void 0),r([o.Input("pTemplateWrapper"),i("design:type",o.TemplateRef)],d.prototype,"templateRef",void 0),d=r([o.Directive({selector:"[pTemplateWrapper]"})],d),t.TemplateWrapper=d;var p=function(){function e(){this.filterType="text",this.exportable=!0,this.sortFunction=new o.EventEmitter}return e.prototype.ngAfterContentInit=function(){var e=this;this.templates.forEach(function(t){switch(t.getType()){case"header":e.headerTemplate=t.template;break;case"body":e.bodyTemplate=t.template;break;case"footer":e.footerTemplate=t.template;break;case"filter":e.filterTemplate=t.template;break;case"editor":e.editorTemplate=t.template;break;default:e.bodyTemplate=t.template}})},e}();r([o.Input(),i("design:type",String)],p.prototype,"field",void 0),r([o.Input(),i("design:type",String)],p.prototype,"colId",void 0),r([o.Input(),i("design:type",String)],p.prototype,"sortField",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterField",void 0),r([o.Input(),i("design:type",String)],p.prototype,"header",void 0),r([o.Input(),i("design:type",String)],p.prototype,"footer",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"sortable",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"editable",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"filter",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterMatchMode",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterType",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"excludeGlobalFilter",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"rowspan",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"colspan",void 0),r([o.Input(),i("design:type",String)],p.prototype,"scope",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"style",void 0),r([o.Input(),i("design:type",String)],p.prototype,"styleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"exportable",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"headerStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"headerStyleClass",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"bodyStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"bodyStyleClass",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"footerStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"footerStyleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"hidden",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"expander",void 0),r([o.Input(),i("design:type",String)],p.prototype,"selectionMode",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterPlaceholder",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"filterMaxlength",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"frozen",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"sortFunction",void 0),r([o.ContentChildren(c),i("design:type",o.QueryList)],p.prototype,"templates",void 0),r([o.ContentChild(o.TemplateRef),i("design:type",o.TemplateRef)],p.prototype,"template",void 0),p=r([a.Component({selector:"p-column",template:""})],p),t.Column=p;var f=function(){};r([o.ContentChildren(p),i("design:type",o.QueryList)],f.prototype,"columns",void 0),f=r([a.Component({selector:"p-row",template:""})],f),t.Row=f;var h=function(){};r([o.Input(),i("design:type",Boolean)],h.prototype,"frozen",void 0),r([o.ContentChildren(f),i("design:type",o.QueryList)],h.prototype,"rows",void 0),h=r([a.Component({selector:"p-headerColumnGroup",template:""})],h),t.HeaderColumnGroup=h;var m=function(){};r([o.Input(),i("design:type",Boolean)],m.prototype,"frozen",void 0),r([o.ContentChildren(f),i("design:type",o.QueryList)],m.prototype,"rows",void 0),m=r([a.Component({selector:"p-footerColumnGroup",template:""})],m),t.FooterColumnGroup=m;var g=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.bodyTemplate,{$implicit:this.column,rowData:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnChanges=function(e){this.view&&"rowIndex"in e&&(this.view.context.rowIndex=e.rowIndex.currentValue)},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],g.prototype,"column",void 0),r([o.Input(),i("design:type",Object)],g.prototype,"rowData",void 0),r([o.Input(),i("design:type",Number)],g.prototype,"rowIndex",void 0),g=r([a.Component({selector:"p-columnBodyTemplateLoader",template:""})],g),t.ColumnBodyTemplateLoader=g;var y=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.headerTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],y.prototype,"column",void 0),y=r([a.Component({selector:"p-columnHeaderTemplateLoader",template:""})],y),t.ColumnHeaderTemplateLoader=y;var v=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.footerTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],v.prototype,"column",void 0),v=r([a.Component({selector:"p-columnFooterTemplateLoader",template:""})],v),t.ColumnFooterTemplateLoader=v;var b=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.filterTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],b.prototype,"column",void 0),b=r([a.Component({selector:"p-columnFilterTemplateLoader",template:""})],b),t.ColumnFilterTemplateLoader=b;var _=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.editorTemplate,{$implicit:this.column,rowData:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],_.prototype,"column",void 0),r([o.Input(),i("design:type",Object)],_.prototype,"rowData",void 0),r([o.Input(),i("design:type",Object)],_.prototype,"rowIndex",void 0),_=r([a.Component({selector:"p-columnEditorTemplateLoader",template:""})],_),t.ColumnEditorTemplateLoader=_;var w=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.template&&(this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.data}))},e.prototype.ngOnDestroy=function(){this.view&&this.view.destroy()},e}();r([o.Input(),i("design:type",o.TemplateRef)],w.prototype,"template",void 0),r([o.Input(),i("design:type",Object)],w.prototype,"data",void 0),w=r([a.Component({selector:"p-templateLoader",template:""})],w),t.TemplateLoader=w;var x=function(){};x=r([o.NgModule({imports:[l.CommonModule],exports:[s,u,p,d,y,g,v,b,c,w,f,h,m,_],declarations:[s,u,p,d,y,g,v,b,c,w,f,h,m,_]})],x),t.SharedModule=x},0:function(e,t,n){e.exports=n("cDNt")},"0l2a":function(e,t,n){"use strict";var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e){this.total=e}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.total))},e}(),l=function(e){function t(t,n){e.call(this,t),this.total=n,this.count=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},t}(i.a);t.a=function(e){return function(e){return function(t){return t.lift(new o(e))}}(e)(this)}},"0nO6":function(e,t,n){"use strict";function r(e){return null==e||0===e.length}function i(e){return null!=e}function o(e){var t=Object(D["\u0275isPromise"])(e)?R(e):e;if(!Object(D["\u0275isObservable"])(t))throw new Error("Expected validator to return Promise or Observable.");return t}function l(e){var t=e.reduce(function(e,t){return null!=t?Object(k.__assign)({},e,t):e},{});return 0===Object.keys(t).length?null:t}function a(e){return e.validate?function(t){return e.validate(t)}:e}function s(e){return e.validate?function(t){return e.validate(t)}:e}function u(){throw new Error("unimplemented")}function c(e,t){return null==e?""+t:(t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}function d(e,t){return null==e?""+t:("string"==typeof t&&(t="'"+t+"'"),t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}function p(e,t){return t.path.concat([e])}function f(e,t){e||y(t,"Cannot find control with"),t.valueAccessor||y(t,"No value accessor for form control with"),e.validator=V.compose([e.validator,t.validator]),e.asyncValidator=V.composeAsync([e.asyncValidator,t.asyncValidator]),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(function(n){e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&h(e,t)})}(e,t),function(t,n){e.registerOnChange(function(e,t){n.valueAccessor.writeValue(e),t&&n.viewToModelUpdate(e)})}(0,t),function(e,t){t.valueAccessor.registerOnTouched(function(){e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&h(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),t.valueAccessor.setDisabledState&&e.registerOnDisabledChange(function(e){t.valueAccessor.setDisabledState(e)}),t._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})}),t._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})})}function h(e,t){t.viewToModelUpdate(e._pendingValue),e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),e._pendingChange=!1}function m(e,t){null==e&&y(t,"Cannot find control with"),e.validator=V.compose([e.validator,t.validator]),e.asyncValidator=V.composeAsync([e.asyncValidator,t.asyncValidator])}function g(e){return y(e,"There is no FormControl instance attached to form control element with")}function y(e,t){var n;throw n=e.path.length>1?"path: '"+e.path.join(" -> ")+"'":e.path[0]?"name: '"+e.path+"'":"unspecified name attribute",new Error(t+" "+n)}function v(e){return null!=e?V.compose(e.map(a)):null}function b(e){return null!=e?V.composeAsync(e.map(s)):null}function _(e,t){if(!e.hasOwnProperty("model"))return!1;var n=e.model;return!!n.isFirstChange()||!Object(D["\u0275looseIdentical"])(t,n.currentValue)}function w(e,t){e._syncPendingControls(),t.forEach(function(e){var t=e.control;"submit"===t.updateOn&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)})}function x(e,t){if(!t)return null;var n=void 0,r=void 0,i=void 0;return t.forEach(function(t){t.constructor===U?n=t:function(e){return le.some(function(t){return e.constructor===t})}(t)?(r&&y(e,"More than one built-in value accessor matches form control with"),r=t):(i&&y(e,"More than one custom value accessor matches form control with"),i=t)}),i||r||n||(y(e,"No valid value accessor for form control with"),null)}function C(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}function E(e){var t=O(e)?e.validators:e;return Array.isArray(t)?v(t):t||null}function S(e,t){var n=O(t)?t.asyncValidators:e;return Array.isArray(n)?b(n):n||null}function O(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}function T(e){return!(e instanceof je||e instanceof Le||e instanceof ze)}Object.defineProperty(t,"__esModule",{value:!0});var k=n("6Xbx"),D=n("LMZF"),I=n("Jsyr"),R=n("KRwF").a.create,M=n("dmC+"),P=n("RyBE");n.d(t,"AbstractControlDirective",function(){return N}),n.d(t,"AbstractFormGroupDirective",function(){return ae}),n.d(t,"CheckboxControlValueAccessor",function(){return H}),n.d(t,"ControlContainer",function(){return A}),n.d(t,"NG_VALUE_ACCESSOR",function(){return z}),n.d(t,"COMPOSITION_BUFFER_MODE",function(){return q}),n.d(t,"DefaultValueAccessor",function(){return U}),n.d(t,"NgControl",function(){return $}),n.d(t,"NgControlStatus",function(){return ce}),n.d(t,"NgControlStatusGroup",function(){return de}),n.d(t,"NgForm",function(){return xe}),n.d(t,"NgModel",function(){return Re}),n.d(t,"NgModelGroup",function(){return ke}),n.d(t,"RadioControlValueAccessor",function(){return Y}),n.d(t,"FormControlDirective",function(){return Ne}),n.d(t,"FormControlName",function(){return He}),n.d(t,"FormGroupDirective",function(){return Le}),n.d(t,"FormArrayName",function(){return ze}),n.d(t,"FormGroupName",function(){return je}),n.d(t,"NgSelectOption",function(){return ne}),n.d(t,"SelectControlValueAccessor",function(){return te}),n.d(t,"SelectMultipleControlValueAccessor",function(){return ie}),n.d(t,"CheckboxRequiredValidator",function(){return Ge}),n.d(t,"EmailValidator",function(){return $e}),n.d(t,"MaxLengthValidator",function(){return Xe}),n.d(t,"MinLengthValidator",function(){return Qe}),n.d(t,"PatternValidator",function(){return et}),n.d(t,"RequiredValidator",function(){return Ue}),n.d(t,"FormBuilder",function(){return tt}),n.d(t,"AbstractControl",function(){return ge}),n.d(t,"FormArray",function(){return be}),n.d(t,"FormControl",function(){return ye}),n.d(t,"FormGroup",function(){return ve}),n.d(t,"NG_ASYNC_VALIDATORS",function(){return F}),n.d(t,"NG_VALIDATORS",function(){return L}),n.d(t,"Validators",function(){return V}),n.d(t,"VERSION",function(){return nt}),n.d(t,"FormsModule",function(){return st}),n.d(t,"ReactiveFormsModule",function(){return ut}),n.d(t,"\u0275ba",function(){return at}),n.d(t,"\u0275z",function(){return lt}),n.d(t,"\u0275x",function(){return it}),n.d(t,"\u0275y",function(){return ot}),n.d(t,"\u0275a",function(){return B}),n.d(t,"\u0275b",function(){return W}),n.d(t,"\u0275c",function(){return se}),n.d(t,"\u0275d",function(){return ue}),n.d(t,"\u0275e",function(){return _e}),n.d(t,"\u0275f",function(){return De}),n.d(t,"\u0275g",function(){return Te}),n.d(t,"\u0275bf",function(){return rt}),n.d(t,"\u0275bb",function(){return G}),n.d(t,"\u0275bc",function(){return K}),n.d(t,"\u0275h",function(){return Z}),n.d(t,"\u0275i",function(){return Q}),n.d(t,"\u0275bd",function(){return X}),n.d(t,"\u0275be",function(){return J}),n.d(t,"\u0275j",function(){return Pe}),n.d(t,"\u0275k",function(){return Be}),n.d(t,"\u0275l",function(){return Ae}),n.d(t,"\u0275n",function(){return Ve}),n.d(t,"\u0275m",function(){return Fe}),n.d(t,"\u0275o",function(){return ee}),n.d(t,"\u0275q",function(){return oe}),n.d(t,"\u0275p",function(){return re}),n.d(t,"\u0275s",function(){return qe}),n.d(t,"\u0275t",function(){return Ke}),n.d(t,"\u0275v",function(){return Ye}),n.d(t,"\u0275u",function(){return Ze}),n.d(t,"\u0275w",function(){return Je}),n.d(t,"\u0275r",function(){return We});var N=function(){function e(){}return Object.defineProperty(e.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"status",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),e.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},e.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},e.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},e}(),A=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),t}(N),L=new D.InjectionToken("NgValidators"),F=new D.InjectionToken("NgAsyncValidators"),j=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,V=function(){function e(){}return e.min=function(e){return function(t){if(r(t.value)||r(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n<e?{min:{min:e,actual:t.value}}:null}},e.max=function(e){return function(t){if(r(t.value)||r(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n>e?{max:{max:e,actual:t.value}}:null}},e.required=function(e){return r(e.value)?{required:!0}:null},e.requiredTrue=function(e){return!0===e.value?null:{required:!0}},e.email=function(e){return j.test(e.value)?null:{email:!0}},e.minLength=function(e){return function(t){if(r(t.value))return null;var n=t.value?t.value.length:0;return n<e?{minlength:{requiredLength:e,actualLength:n}}:null}},e.maxLength=function(e){return function(t){var n=t.value?t.value.length:0;return n>e?{maxlength:{requiredLength:e,actualLength:n}}:null}},e.pattern=function(t){if(!t)return e.nullValidator;var n,i;return"string"==typeof t?(i="^"+t+"$",n=new RegExp(i)):(i=t.toString(),n=t),function(e){if(r(e.value))return null;var t=e.value;return n.test(t)?null:{pattern:{requiredPattern:i,actualValue:t}}}},e.nullValidator=function(e){return null},e.compose=function(e){if(!e)return null;var t=e.filter(i);return 0==t.length?null:function(e){return l(function(e,n){return t.map(function(t){return t(e)})}(e))}},e.composeAsync=function(e){if(!e)return null;var t=e.filter(i);return 0==t.length?null:function(e){var n=function(e,n){return t.map(function(t){return t(e)})}(e).map(o);return M.a.call(Object(I.a)(n),l)}},e}(),z=new D.InjectionToken("NgValueAccessor"),B={provide:z,useExisting:Object(D.forwardRef)(function(){return H}),multi:!0},H=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"checked",e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),W={provide:z,useExisting:Object(D.forwardRef)(function(){return U}),multi:!0},q=new D.InjectionToken("CompositionEventMode"),U=function(){function e(e,t,n){this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){var e=Object(P.s)()?Object(P.s)().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._handleInput=function(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)},e.prototype._compositionStart=function(){this._composing=!0},e.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},e}(),G={provide:z,useExisting:Object(D.forwardRef)(function(){return K}),multi:!0},K=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),$=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._parent=null,t.name=null,t.valueAccessor=null,t._rawValidators=[],t._rawAsyncValidators=[],t}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"validator",{get:function(){return u()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return u()},enumerable:!0,configurable:!0}),t}(N),Z={provide:z,useExisting:Object(D.forwardRef)(function(){return Y}),multi:!0},Q=function(){function e(){this._accessors=[]}return e.prototype.add=function(e,t){this._accessors.push([e,t])},e.prototype.remove=function(e){for(var t=this._accessors.length-1;t>=0;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},e.prototype.select=function(e){var t=this;this._accessors.forEach(function(n){t._isSameGroup(n,e)&&n[1]!==e&&n[1].fireUncheck(e.value)})},e.prototype._isSameGroup=function(e,t){return!!e[0].control&&e[0]._parent===t._control._parent&&e[1].name===t.name},e}(),Y=function(){function e(e,t,n,r){this._renderer=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return e.prototype.ngOnInit=function(){this._control=this._injector.get($),this._checkName(),this._registry.add(this._control,this)},e.prototype.ngOnDestroy=function(){this._registry.remove(this)},e.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},e.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},e.prototype.fireUncheck=function(e){this.writeValue(e)},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},e.prototype._throwNameError=function(){throw new Error('\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type="radio" formControlName="food" name="food">\n    ')},e}(),X={provide:z,useExisting:Object(D.forwardRef)(function(){return J}),multi:!0},J=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(e))},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),ee={provide:z,useExisting:Object(D.forwardRef)(function(){return te}),multi:!0},te=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=D["\u0275looseIdentical"]}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=c(t,e);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){t.value=t._getOptionValue(n),e(t.value)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(){return(this._idCounter++).toString()},e.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t<n.length;t++){var r=n[t];if(this._compareWith(this._optionMap.get(r),e))return r}return null},e.prototype._getOptionValue=function(e){var t=e.split(":")[0];return this._optionMap.has(t)?this._optionMap.get(t):e},e}(),ne=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption())}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._select._optionMap.set(this.id,e),this._setElementValue(c(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._setElementValue(e),this._select&&this._select.writeValue(this._select.value)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}(),re={provide:z,useExisting:Object(D.forwardRef)(function(){return ie}),multi:!0},ie=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=D["\u0275looseIdentical"]}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t=this;this.value=e;var n;if(Array.isArray(e)){var r=e.map(function(e){return t._getOptionId(e)});n=function(e,t){e._setSelected(r.indexOf(t.toString())>-1)}}else n=function(e,t){e._setSelected(!1)};this._optionMap.forEach(n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("selectedOptions"))for(var i=n.selectedOptions,o=0;o<i.length;o++){var l=i.item(o),a=t._getOptionValue(l.value);r.push(a)}else for(i=n.options,o=0;o<i.length;o++)(l=i.item(o)).selected&&(a=t._getOptionValue(l.value),r.push(a));t.value=r,e(r)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(e){var t=(this._idCounter++).toString();return this._optionMap.set(t,e),t},e.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t<n.length;t++){var r=n[t];if(this._compareWith(this._optionMap.get(r)._value,e))return r}return null},e.prototype._getOptionValue=function(e){var t=e.split(":")[0];return this._optionMap.has(t)?this._optionMap.get(t)._value:e},e}(),oe=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption(this))}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._value=e,this._setElementValue(d(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._select?(this._value=e,this._setElementValue(d(this.id,e)),this._select.writeValue(this._select.value)):this._setElementValue(e)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype._setSelected=function(e){this._renderer.setProperty(this._element.nativeElement,"selected",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}(),le=[H,J,K,te,ie,Y],ae=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){},t}(A),se=function(){function e(e){this._cd=e}return Object.defineProperty(e.prototype,"ngClassUntouched",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassTouched",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPristine",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassDirty",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassValid",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassInvalid",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPending",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),e}(),ue={"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]":"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending"},ce=function(e){function t(t){return e.call(this,t)||this}return Object(k.__extends)(t,e),t}(se),de=function(e){function t(t){return e.call(this,t)||this}return Object(k.__extends)(t,e),t}(se),pe="VALID",fe="INVALID",he="PENDING",me="DISABLED",ge=function(){function e(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}return Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.status===pe},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.status===fe},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return this.status==he},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.status===me},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.status!==me},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"updateOn",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"},enumerable:!0,configurable:!0}),e.prototype.setValidators=function(e){this.validator=E(e)},e.prototype.setAsyncValidators=function(e){this.asyncValidator=S(e)},e.prototype.clearValidators=function(){this.validator=null},e.prototype.clearAsyncValidators=function(){this.asyncValidator=null},e.prototype.markAsTouched=function(e){void 0===e&&(e={}),this.touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},e.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype.markAsDirty=function(e){void 0===e&&(e={}),this.pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},e.prototype.markAsPristine=function(e){void 0===e&&(e={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype.markAsPending=function(e){void 0===e&&(e={}),this.status=he,this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},e.prototype.disable=function(e){void 0===e&&(e={}),this.status=me,this.errors=null,this._forEachChild(function(e){e.disable({onlySelf:!0})}),this._updateValue(),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!0)})},e.prototype.enable=function(e){void 0===e&&(e={}),this.status=pe,this._forEachChild(function(e){e.enable({onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!1)})},e.prototype._updateAncestors=function(e){this._parent&&!e&&(this._parent.updateValueAndValidity(),this._parent._updatePristine(),this._parent._updateTouched())},e.prototype.setParent=function(e){this._parent=e},e.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),this.status!==pe&&this.status!==he||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},e.prototype._updateTreeValidity=function(e){void 0===e&&(e={emitEvent:!0}),this._forEachChild(function(t){return t._updateTreeValidity(e)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})},e.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?me:pe},e.prototype._runValidator=function(){return this.validator?this.validator(this):null},e.prototype._runAsyncValidator=function(e){var t=this;if(this.asyncValidator){this.status=he;var n=o(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return t.setErrors(n,{emitEvent:e})})}},e.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},e.prototype.setErrors=function(e,t){void 0===t&&(t={}),this.errors=e,this._updateControlsErrors(!1!==t.emitEvent)},e.prototype.get=function(e){return function(e,t,n){return null==t?null:(t instanceof Array||(t=t.split(".")),t instanceof Array&&0===t.length?null:t.reduce(function(e,t){return e instanceof ve?e.controls[t]||null:e instanceof be?e.at(t)||null:null},e))}(this,e)},e.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null},e.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(e.prototype,"root",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),e.prototype._updateControlsErrors=function(e){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(e)},e.prototype._initObservables=function(){this.valueChanges=new D.EventEmitter,this.statusChanges=new D.EventEmitter},e.prototype._calculateStatus=function(){return this._allControlsDisabled()?me:this.errors?fe:this._anyControlsHaveStatus(he)?he:this._anyControlsHaveStatus(fe)?fe:pe},e.prototype._anyControlsHaveStatus=function(e){return this._anyControls(function(t){return t.status===e})},e.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},e.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},e.prototype._updatePristine=function(e){void 0===e&&(e={}),this.pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype._updateTouched=function(e){void 0===e&&(e={}),this.touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype._isBoxedValue=function(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e},e.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},e.prototype._setUpdateStrategy=function(e){O(e)&&null!=e.updateOn&&(this._updateOn=e.updateOn)},e}(),ye=function(e){function t(t,n,r){void 0===t&&(t=null);var i=e.call(this,E(n),S(r,n))||this;return i._onChange=[],i._applyFormState(t),i._setUpdateStrategy(n),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return Object(k.__extends)(t,e),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this.value=this._pendingValue=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n.value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},t.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1},t.prototype._updateValue=function(){},t.prototype._anyControls=function(e){return!1},t.prototype._allControlsDisabled=function(){return this.disabled},t.prototype.registerOnChange=function(e){this._onChange.push(e)},t.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},t.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},t.prototype._forEachChild=function(e){},t.prototype._syncPendingControls=function(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))},t.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e},t}(ge),ve=function(e){function t(t,n,r){var i=e.call(this,E(n),S(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(k.__extends)(t,e),t.prototype.registerControl=function(e,t){return this.controls[e]?this.controls[e]:(this.controls[e]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},t.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),Object.keys(e).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),Object.keys(e).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof ye?t.value:t.getRawValue(),e})},t.prototype._syncPendingControls=function(){var e=this._reduceChildren(!1,function(e,t){return!!t._syncPendingControls()||e});return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[e])throw new Error("Cannot find form control with name: "+e+".")},t.prototype._forEachChild=function(e){var t=this;Object.keys(this.controls).forEach(function(n){return e(t.controls[n],n)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){t.setParent(e),t._registerOnCollectionChange(e._onCollectionChange)})},t.prototype._updateValue=function(){this.value=this._reduceValue()},t.prototype._anyControls=function(e){var t=this,n=!1;return this._forEachChild(function(r,i){n=n||t.contains(i)&&e(r)}),n},t.prototype._reduceValue=function(){var e=this;return this._reduceChildren({},function(t,n,r){return(n.enabled||e.disabled)&&(t[r]=n.value),t})},t.prototype._reduceChildren=function(e,t){var n=e;return this._forEachChild(function(e,r){n=t(n,e,r)}),n},t.prototype._allControlsDisabled=function(){for(var e=0,t=Object.keys(this.controls);e<t.length;e++)if(this.controls[t[e]].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},t}(ge),be=function(e){function t(t,n,r){var i=e.call(this,E(n),S(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(k.__extends)(t,e),t.prototype.at=function(e){return this.controls[e]},t.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(t.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),e.forEach(function(e,r){n._throwIfControlMissing(r),n.at(r).setValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),e.forEach(function(e,r){n.at(r)&&n.at(r).patchValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e=[]),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof ye?e.value:e.getRawValue()})},t.prototype._syncPendingControls=function(){var e=this.controls.reduce(function(e,t){return!!t._syncPendingControls()||e},!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(e))throw new Error("Cannot find form control at index "+e)},t.prototype._forEachChild=function(e){this.controls.forEach(function(t,n){e(t,n)})},t.prototype._updateValue=function(){var e=this;this.value=this.controls.filter(function(t){return t.enabled||e.disabled}).map(function(e){return e.value})},t.prototype._anyControls=function(e){return this.controls.some(function(t){return t.enabled&&e(t)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){return e._registerControl(t)})},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control at index: "+n+".")})},t.prototype._allControlsDisabled=function(){for(var e=0,t=this.controls;e<t.length;e++)if(t[e].enabled)return!1;return this.controls.length>0||this.disabled},t.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},t}(ge),_e={provide:A,useExisting:Object(D.forwardRef)(function(){return xe})},we=Promise.resolve(null),xe=function(e){function t(t,n){var r=e.call(this)||this;return r.submitted=!1,r._directives=[],r.ngSubmit=new D.EventEmitter,r.form=new ve({},v(t),b(n)),r}return Object(k.__extends)(t,e),t.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(t.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);e.control=n.registerControl(e.name,e.control),f(e.control,e),e.control.updateValueAndValidity({emitEvent:!1}),t._directives.push(e)})},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name),C(t._directives,e)})},t.prototype.addFormGroup=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path),r=new ve({});m(r,e),n.registerControl(e.name,r),r.updateValueAndValidity({emitEvent:!1})})},t.prototype.removeFormGroup=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){var n=this;we.then(function(){n.form.get(e.path).setValue(t)})},t.prototype.setValue=function(e){this.control.setValue(e)},t.prototype.onSubmit=function(e){return this.submitted=!0,w(this.form,this._directives),this.ngSubmit.emit(e),!1},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},t.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},t}(A),Ce='\n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });',Ee='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',Se='\n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>',Oe=function(){function e(){}return e.modelParentException=function(){throw new Error('\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup\'s partner directive "formControlName" instead.  Example:\n\n      '+Ce+'\n\n      Or, if you\'d like to avoid registering this form control, indicate that it\'s standalone in ngModelOptions:\n\n      Example:\n\n      \n    <div [formGroup]="myGroup">\n       <input formControlName="firstName">\n       <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">\n    </div>\n  ')},e.formGroupNameException=function(){throw new Error("\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      "+Ee+"\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      "+Se)},e.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as \'standalone\' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]="person.firstName" name="first">\n      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">')},e.modelGroupParentException=function(){throw new Error("\n      ngModelGroup cannot be used with a parent formGroup directive.\n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      "+Ee+"\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      "+Se)},e}(),Te={provide:A,useExisting:Object(D.forwardRef)(function(){return ke})},ke=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype._checkParentType=function(){this._parent instanceof t||this._parent instanceof xe||Oe.modelGroupParentException()},t}(ae),De={provide:$,useExisting:Object(D.forwardRef)(function(){return Re})},Ie=Promise.resolve(null),Re=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o.control=new ye,o._registered=!1,o.update=new D.EventEmitter,o._parent=t,o._rawValidators=n||[],o._rawAsyncValidators=r||[],o.valueAccessor=x(o,i),o}return Object(k.__extends)(t,e),t.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in e&&this._updateDisabled(e),_(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(t.prototype,"path",{get:function(){return this._parent?p(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._setUpControl=function(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)},t.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},t.prototype._setUpStandalone=function(){f(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})},t.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},t.prototype._checkParentType=function(){!(this._parent instanceof ke)&&this._parent instanceof ae?Oe.formGroupNameException():this._parent instanceof ke||this._parent instanceof xe||Oe.modelParentException()},t.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||Oe.missingNameException()},t.prototype._updateValue=function(e){var t=this;Ie.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},t.prototype._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=""===n||n&&"false"!==n;Ie.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},t}($),Me=function(){function e(){}return e.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+Ce)},e.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        '+Ee+"\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        "+Se)},e.missingFormException=function(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       "+Ce)},e.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+Ee)},e.arrayParentException=function(){throw new Error('formArrayName must be used with a parent formGroup directive.  You\'ll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        \n    <div [formGroup]="myGroup">\n      <div formArrayName="cities">\n        <div *ngFor="let city of cityArray.controls; index as i">\n          <input [formControlName]="i">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl(\'SF\')]);\n    this.myGroup = new FormGroup({\n      cities: this.cityArray\n    });')},e.disabledAttrWarning=function(){console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n       \n      Example: \n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ")},e}(),Pe={provide:$,useExisting:Object(D.forwardRef)(function(){return Ne})},Ne=function(e){function t(t,n,r){var i=e.call(this)||this;return i.update=new D.EventEmitter,i._rawValidators=t||[],i._rawAsyncValidators=n||[],i.valueAccessor=x(i,r),i}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"isDisabled",{set:function(e){Me.disabledAttrWarning()},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){this._isControlChanged(e)&&(f(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),_(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._isControlChanged=function(e){return e.hasOwnProperty("form")},t}($),Ae={provide:A,useExisting:Object(D.forwardRef)(function(){return Le})},Le=function(e){function t(t,n){var r=e.call(this)||this;return r._validators=t,r._asyncValidators=n,r.submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new D.EventEmitter,r}return Object(k.__extends)(t,e),t.prototype.ngOnChanges=function(e){this._checkFormPresent(),e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(t.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this.form.get(e.path);return f(t,e),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=function(e){C(this.directives,e)},t.prototype.addFormGroup=function(e){var t=this.form.get(e.path);m(t,e),t.updateValueAndValidity({emitEvent:!1})},t.prototype.removeFormGroup=function(e){},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.addFormArray=function(e){var t=this.form.get(e.path);m(t,e),t.updateValueAndValidity({emitEvent:!1})},t.prototype.removeFormArray=function(e){},t.prototype.getFormArray=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){this.form.get(e.path).setValue(t)},t.prototype.onSubmit=function(e){return this.submitted=!0,w(this.form,this.directives),this.ngSubmit.emit(e),!1},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._updateDomValue=function(){var e=this;this.directives.forEach(function(t){var n=e.form.get(t.path);t.control!==n&&(function(e,t){t.valueAccessor.registerOnChange(function(){return g(t)}),t.valueAccessor.registerOnTouched(function(){return g(t)}),t._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),t._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),e&&e._clearChangeFns()}(t.control,t),n&&f(n,t),t.control=n)}),this.form._updateTreeValidity({emitEvent:!1})},t.prototype._updateRegistrations=function(){var e=this;this.form._registerOnCollectionChange(function(){return e._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},t.prototype._updateValidators=function(){var e=v(this._validators);this.form.validator=V.compose([this.form.validator,e]);var t=b(this._asyncValidators);this.form.asyncValidator=V.composeAsync([this.form.asyncValidator,t])},t.prototype._checkFormPresent=function(){this.form||Me.missingFormException()},t}(A),Fe={provide:A,useExisting:Object(D.forwardRef)(function(){return je})},je=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype._checkParentType=function(){T(this._parent)&&Me.groupParentException()},t}(ae),Ve={provide:A,useExisting:Object(D.forwardRef)(function(){return ze})},ze=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){T(this._parent)&&Me.arrayParentException()},t}(A),Be={provide:$,useExisting:Object(D.forwardRef)(function(){return He})},He=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._added=!1,o.update=new D.EventEmitter,o._parent=t,o._rawValidators=n||[],o._rawAsyncValidators=r||[],o.valueAccessor=x(o,i),o}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"isDisabled",{set:function(e){Me.disabledAttrWarning()},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){this._added||this._setUpControl(),_(e,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){!(this._parent instanceof je)&&this._parent instanceof ae?Me.ngModelGroupException():this._parent instanceof je||this._parent instanceof Le||this._parent instanceof ze||Me.controlParentException()},t.prototype._setUpControl=function(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},t}($),We={provide:L,useExisting:Object(D.forwardRef)(function(){return Ue}),multi:!0},qe={provide:L,useExisting:Object(D.forwardRef)(function(){return Ge}),multi:!0},Ue=function(){function e(){}return Object.defineProperty(e.prototype,"required",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&""+e!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this.required?V.required(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),Ge=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),t.prototype.validate=function(e){return this.required?V.requiredTrue(e):null},t}(Ue),Ke={provide:L,useExisting:Object(D.forwardRef)(function(){return $e}),multi:!0},$e=function(){function e(){}return Object.defineProperty(e.prototype,"email",{set:function(e){this._enabled=""===e||!0===e||"true"===e,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this._enabled?V.email(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),Ze={provide:L,useExisting:Object(D.forwardRef)(function(){return Qe}),multi:!0},Qe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"minlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.minLength(parseInt(this.minlength,10))},e}(),Ye={provide:L,useExisting:Object(D.forwardRef)(function(){return Xe}),multi:!0},Xe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"maxlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.maxLength(parseInt(this.maxlength,10))},e}(),Je={provide:L,useExisting:Object(D.forwardRef)(function(){return et}),multi:!0},et=function(){function e(){}return e.prototype.ngOnChanges=function(e){"pattern"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.pattern(this.pattern)},e}(),tt=function(){function e(){}return e.prototype.group=function(e,t){void 0===t&&(t=null);var n=this._reduceControls(e);return new ve(n,null!=t?t.validator:null,null!=t?t.asyncValidator:null)},e.prototype.control=function(e,t,n){return new ye(e,t,n)},e.prototype.array=function(e,t,n){var r=this,i=e.map(function(e){return r._createControl(e)});return new be(i,t,n)},e.prototype._reduceControls=function(e){var t=this,n={};return Object.keys(e).forEach(function(r){n[r]=t._createControl(e[r])}),n},e.prototype._createControl=function(e){return e instanceof ye||e instanceof ve||e instanceof be?e:Array.isArray(e)?this.control(e[0],e.length>1?e[1]:null,e.length>2?e[2]:null):this.control(e)},e}(),nt=new D.Version("5.1.1"),rt=function(){},it=[rt,ne,oe,U,K,J,H,te,ie,Y,ce,de,Ue,Qe,Xe,et,Ge,$e],ot=[Re,ke,xe],lt=[Ne,Le,He,je,ze],at=function(){},st=function(){},ut=function(){}},"1j/l":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=Array.isArray||function(e){return e&&"number"==typeof e.length}},"2Fuj":function(e,t,n){var r=n("R5c1"),i=n("a/Sk");e.exports=Object.keys||function(e){return r(e,i)}},"2kLc":function(e,t,n){"use strict";t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n=Number.POSITIVE_INFINITY,a=null,s=e[e.length-1];return Object(o.a)(s)?(a=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(n=e.pop())):"number"==typeof s&&(n=e.pop()),null===a&&1===e.length&&e[0]instanceof r.a?e[0]:Object(l.a)(n)(new i.a(e,a))};var r=n("AP4T"),i=n("Oryw"),o=n("3iOE"),l=n("bywS")},"3LDD":function(e,t,n){"use strict";var r=n("tose").f,i=n("51pc"),o=n("pBmS"),l=n("pa70"),a=n("Lcie"),s=n("p/bR"),u=n("WsSm"),c=n("w/BM"),d=n("KpXt"),p=n("V+0c"),f=n("xI8H").fastKey,h=n("Y5fy"),m=p?"_s":"size",g=function(e,t){var n,r=f(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,u){var c=e(function(e,r){a(e,c,t,"_i"),e._t=t,e._i=i(null),e._f=void 0,e._l=void 0,e[m]=0,void 0!=r&&s(r,n,e[u],e)});return o(c.prototype,{clear:function(){for(var e=h(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var n=h(this,t),r=g(n,e);if(r){var i=r.n,o=r.p;delete n._i[r.i],r.r=!0,o&&(o.n=i),i&&(i.p=o),n._f==r&&(n._f=i),n._l==r&&(n._l=o),n[m]--}return!!r},forEach:function(e){h(this,t);for(var n,r=l(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!g(h(this,t),e)}}),p&&r(c.prototype,"size",{get:function(){return h(this,t)[m]}}),c},def:function(e,t,n){var r,i,o=g(e,t);return o?o.v=n:(e._l=o={i:i=f(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=o),r&&(r.n=o),e[m]++,"F"!==i&&(e._i[i]=o)),e},getEntry:g,setStrong:function(e,t,n){u(e,t,function(e,n){this._t=h(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?c(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,c(1))},n?"entries":"values",!n,!0),d(t)}}},"3iOE":function(e,t,n){"use strict";t.a=function(e){return e&&"function"==typeof e.schedule}},"3k/+":function(e,t,n){"use strict";function r(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new l(e,t,n))}}var i=n("6Xbx"),o=n("E9/g"),l=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.accumulator,this.seed,this.hasSeed))},e}(),a=function(e){function t(t,n,r,i){e.call(this,t),this.accumulator=n,this._seed=r,this.hasSeed=i,this.index=0}return Object(i.__extends)(t,e),Object.defineProperty(t.prototype,"seed",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},t}(o.a);t.a=function(e,t){return arguments.length>=2?r(e,t)(this):r(e)(this)}},"3m71":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=n("Ecq+").a.create},"3r0D":function(e,t,n){var r=n("Iclu")("wks"),i=n("c09d"),o=n("ptrv").Symbol,l="function"==typeof o;(e.exports=function(e){return r[e]||(r[e]=l&&o[e]||(l?o:i)("Symbol."+e))}).store=r},"4cOY":function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=function(){function e(){this.calculatedScrollbarWidth=null}return e.prototype.addClass=function(e,t){e.classList?e.classList.add(t):e.className+=" "+t},e.prototype.addMultipleClasses=function(e,t){if(e.classList)for(var n=t.split(" "),r=0;r<n.length;r++)e.classList.add(n[r]);else for(n=t.split(" "),r=0;r<n.length;r++)e.className+=" "+n[r]},e.prototype.removeClass=function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\b)"+t.split(" ").join("|")+"(\\b|$)","gi")," ")},e.prototype.hasClass=function(e,t){return e.classList?e.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(e.className)},e.prototype.siblings=function(e){return Array.prototype.filter.call(e.parentNode.children,function(t){return t!==e})},e.prototype.find=function(e,t){return e.querySelectorAll(t)},e.prototype.findSingle=function(e,t){return e.querySelector(t)},e.prototype.index=function(e){for(var t=e.parentNode.childNodes,n=0,r=0;r<t.length;r++){if(t[r]==e)return n;1==t[r].nodeType&&n++}return-1},e.prototype.relativePosition=function(e,t){var n,r,i=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=t.offsetHeight,l=t.offsetWidth,a=t.getBoundingClientRect(),s=(this.getWindowScrollTop(),this.getViewport());a.top+o+i.height>s.height?a.top+(n=-1*i.height)<0&&(n=0):n=o,r=a.left+i.width>s.width?l-i.width:0,e.style.top=n+"px",e.style.left=r+"px"},e.prototype.absolutePosition=function(e,t){var n,r,i=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=i.height,l=i.width,a=t.offsetHeight,s=t.offsetWidth,u=t.getBoundingClientRect(),c=this.getWindowScrollTop(),d=this.getWindowScrollLeft(),p=this.getViewport();u.top+a+o>p.height?(n=u.top+c-o)<0&&(n=0+c):n=a+u.top+c,r=u.left+s+l>p.width?u.left+d+s-l:u.left+d,e.style.top=n+"px",e.style.left=r+"px"},e.prototype.getHiddenElementOuterHeight=function(e){e.style.visibility="hidden",e.style.display="block";var t=e.offsetHeight;return e.style.display="none",e.style.visibility="visible",t},e.prototype.getHiddenElementOuterWidth=function(e){e.style.visibility="hidden",e.style.display="block";var t=e.offsetWidth;return e.style.display="none",e.style.visibility="visible",t},e.prototype.getHiddenElementDimensions=function(e){var t={};return e.style.visibility="hidden",e.style.display="block",t.width=e.offsetWidth,t.height=e.offsetHeight,e.style.display="none",e.style.visibility="visible",t},e.prototype.scrollInView=function(e,t){var n=getComputedStyle(e).getPropertyValue("borderTopWidth"),r=n?parseFloat(n):0,i=getComputedStyle(e).getPropertyValue("paddingTop"),o=i?parseFloat(i):0,l=e.getBoundingClientRect(),a=t.getBoundingClientRect().top+document.body.scrollTop-(l.top+document.body.scrollTop)-r-o,s=e.scrollTop,u=e.clientHeight,c=this.getOuterHeight(t);a<0?e.scrollTop=s+a:a+c>u&&(e.scrollTop=s+a-u+c)},e.prototype.fadeIn=function(e,t){e.style.opacity=0;var n=+new Date,r=0,i=function(){r=+e.style.opacity+((new Date).getTime()-n)/t,e.style.opacity=r,n=+new Date,+r<1&&(window.requestAnimationFrame&&requestAnimationFrame(i)||setTimeout(i,16))};i()},e.prototype.fadeOut=function(e,t){var n=1,r=50/t,i=setInterval(function(){(n-=r)<=0&&(n=0,clearInterval(i)),e.style.opacity=n},50)},e.prototype.getWindowScrollTop=function(){var e=document.documentElement;return(window.pageYOffset||e.scrollTop)-(e.clientTop||0)},e.prototype.getWindowScrollLeft=function(){var e=document.documentElement;return(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0)},e.prototype.matches=function(e,t){var n=Element.prototype;return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(e){return-1!==[].indexOf.call(document.querySelectorAll(e),this)}).call(e,t)},e.prototype.getOuterWidth=function(e,t){var n=e.offsetWidth;if(t){var r=getComputedStyle(e);n+=parseFloat(r.marginLeft)+parseFloat(r.marginRight)}return n},e.prototype.getHorizontalPadding=function(e){var t=getComputedStyle(e);return parseFloat(t.paddingLeft)+parseFloat(t.paddingRight)},e.prototype.getHorizontalMargin=function(e){var t=getComputedStyle(e);return parseFloat(t.marginLeft)+parseFloat(t.marginRight)},e.prototype.innerWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t+=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)},e.prototype.width=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)},e.prototype.getInnerHeight=function(e){var t=e.offsetHeight,n=getComputedStyle(e);return t+=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)},e.prototype.getOuterHeight=function(e,t){var n=e.offsetHeight;if(t){var r=getComputedStyle(e);n+=parseFloat(r.marginTop)+parseFloat(r.marginBottom)}return n},e.prototype.getHeight=function(e){var t=e.offsetHeight,n=getComputedStyle(e);return t-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)+parseFloat(n.borderTopWidth)+parseFloat(n.borderBottomWidth)},e.prototype.getWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)+parseFloat(n.borderLeftWidth)+parseFloat(n.borderRightWidth)},e.prototype.getViewport=function(){var e=window,t=document,n=t.documentElement,r=t.getElementsByTagName("body")[0];return{width:e.innerWidth||n.clientWidth||r.clientWidth,height:e.innerHeight||n.clientHeight||r.clientHeight}},e.prototype.getOffset=function(e){var t=e.getBoundingClientRect();return{top:t.top+document.body.scrollTop,left:t.left+document.body.scrollLeft}},e.prototype.getUserAgent=function(){return navigator.userAgent},e.prototype.isIE=function(){var e=window.navigator.userAgent;return e.indexOf("MSIE ")>0||(e.indexOf("Trident/")>0?(e.indexOf("rv:"),!0):e.indexOf("Edge/")>0)},e.prototype.appendChild=function(e,t){if(this.isElement(t))t.appendChild(e);else{if(!t.el||!t.el.nativeElement)throw"Cannot append "+t+" to "+e;t.el.nativeElement.appendChild(e)}},e.prototype.removeChild=function(e,t){if(this.isElement(t))t.removeChild(e);else{if(!t.el||!t.el.nativeElement)throw"Cannot remove "+e+" from "+t;t.el.nativeElement.removeChild(e)}},e.prototype.isElement=function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},e.prototype.calculateScrollbarWidth=function(){if(null!==this.calculatedScrollbarWidth)return this.calculatedScrollbarWidth;var e=document.createElement("div");e.className="ui-scrollbar-measure",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),this.calculatedScrollbarWidth=t,t},e.prototype.invokeElementMethod=function(e,t,n){e[t].apply(e,n)},e.prototype.clearSelection=function(){if(window.getSelection)window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().rangeCount>0&&window.getSelection().getRangeAt(0).getClientRects().length>0&&window.getSelection().removeAllRanges();else if(document.selection&&document.selection.empty)try{document.selection.empty()}catch(e){}},e.zindex=1e3,e}();o=r([i.Injectable()],o),t.DomHandler=o},"51pc":function(e,t,n){var r=n("+pQw"),i=n("ewdp"),o=n("a/Sk"),l=n("yIWP")("IE_PROTO"),a=function(){},s=function(){var e,t=n("BQSv")("iframe"),r=o.length;for(t.style.display="none",n("Ed9o").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),s=e.F;r--;)delete s.prototype[o[r]];return s()};e.exports=Object.create||function(e,t){var n;return null!==e?(a.prototype=r(e),n=new a,a.prototype=null,n[l]=e):n=s(),void 0===t?n:i(n,t)}},"5GJ3":function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.key,l=r.map,a=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:o(arguments[2]),r=l(i(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var s=a.get(t);return s.delete(n),!!s.size||a.delete(t)}})},"5O0w":function(e,t,n){"use strict";t.a=function(e){return function(t){return t.lift(new l(e))}};var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.notifier))},e}(),a=function(e){function t(t,n){e.call(this,t),this.notifier=n,this.add(Object(o.a)(this,n))}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.complete()},t.prototype.notifyComplete=function(){},t}(i.a)},"5jKg":function(e,t,n){"use strict";t.a=function(e,t){return function(n){return n.lift(new l(e,t))}};var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e,t){this.project=e,this.resultSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.project,this.resultSelector))},e}(),a=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.resultSelector=r,this.index=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){var r=this.innerSubscription;r&&r.unsubscribe(),this.add(this.innerSubscription=Object(o.a)(this,e,t,n))},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.innerSubscription=null},t.prototype.notifyComplete=function(t){this.remove(t),this.innerSubscription=null,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t,n,r,i){this.resultSelector?this._tryNotifyNext(e,t,n,r):this.destination.next(t)},t.prototype._tryNotifyNext=function(e,t,n,r){var i;try{i=this.resultSelector(e,t,n,r)}catch(e){return void this.destination.error(e)}this.destination.next(i)},t}(i.a)},"5oDA":function(e,t,n){var r=n("JXkd"),i=n("+pQw"),o=function(e,t){if(i(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("pa70")(Function.call,n("6De9").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return o(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:o}},"5q5V":function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("6Xbx"),i=n("TO51"),o=n("Gcw1"),l=n("qLnt"),a=n("YRqN"),s=n("Upor"),u=n("jaVc"),c=function(e){function t(t,n,r){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY),e.call(this),this.scheduler=r,this._events=[],this._bufferSize=t<1?1:t,this._windowTime=n<1?1:n}return Object(r.__extends)(t,e),t.prototype.next=function(t){var n=this._getNow();this._events.push(new d(n,t)),this._trimBufferThenGetEvents(),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){var t,n=this._trimBufferThenGetEvents(),r=this.scheduler;if(this.closed)throw new s.a;this.hasError?t=l.a.EMPTY:this.isStopped?t=l.a.EMPTY:(this.observers.push(e),t=new u.a(this,e)),r&&e.add(e=new a.a(e,r));for(var i=n.length,o=0;o<i&&!e.closed;o++)e.next(n[o].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},t.prototype._getNow=function(){return(this.scheduler||o.a).now()},t.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(e-r[o].time<n);)o++;return i>t&&(o=Math.max(o,i-t)),o>0&&r.splice(0,o),r},t}(i.Subject),d=function(e,t){this.time=e,this.value=t}},"6De9":function(e,t,n){var r=n("9e9+"),i=n("piOq"),o=n("+GRi"),l=n("A1WY"),a=n("rMsi"),s=n("gNkH"),u=Object.getOwnPropertyDescriptor;t.f=n("V+0c")?u:function(e,t){if(e=o(e),t=l(t,!0),s)try{return u(e,t)}catch(e){}if(a(e,t))return i(!r.f.call(e,t),e[t])}},"6S6c":function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("LaOa")},"6Xbx":function(e,t,n){"use strict";function r(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}function o(e){return this instanceof o?(this.v=e,this):new o(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.__extends=function(e,t){function n(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)},n.d(t,"__assign",function(){return a}),t.__rest=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&(n[r[i]]=e[r[i]])}return n},t.__decorate=function(e,t,n,r){var i,o=arguments.length,l=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(l=(o<3?i(l):o>3?i(t,n,l):i(t,n))||l);return o>3&&l&&Object.defineProperty(t,n,l),l},t.__param=function(e,t){return function(n,r){t(n,r,e)}},t.__metadata=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},t.__awaiter=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function l(e){try{s(r.next(e))}catch(e){o(e)}}function a(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){e.done?i(e.value):new n(function(t){t(e.value)}).then(l,a)}s((r=r.apply(e,t||[])).next())})},t.__generator=function(e,t){function n(n){return function(l){return function(n){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,i&&(o=i[2&n[0]?"return":n[0]?"throw":"next"])&&!(o=o.call(i,n[1])).done)return o;switch(i=0,o&&(n=[0,o.value]),n[0]){case 0:case 1:o=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,i=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(o=a.trys,!(o=o.length>0&&o[o.length-1])&&(6===n[0]||2===n[0])){a=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]<o[3])){a.label=n[1];break}if(6===n[0]&&a.label<o[1]){a.label=o[1],o=n;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(n);break}o[2]&&a.ops.pop(),a.trys.pop();continue}n=t.call(e,a)}catch(e){n=[6,e],i=0}finally{r=o=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,l])}}var r,i,o,l,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return l={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l},t.__exportStar=function(e,t){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])},t.__values=r,t.__read=i,t.__spread=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(i(arguments[t]));return e},t.__await=o,t.__asyncGenerator=function(e,t,n){function r(e){c[e]&&(u[e]=function(t){return new Promise(function(n,r){d.push([e,t,n,r])>1||i(e,t)})})}function i(e,t){try{!function(e){e.value instanceof o?Promise.resolve(e.value.v).then(l,a):s(d[0][2],e)}(c[e](t))}catch(e){s(d[0][3],e)}}function l(e){i("next",e)}function a(e){i("throw",e)}function s(e,t){e(t),d.shift(),d.length&&i(d[0][0],d[0][1])}if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var u,c=n.apply(e,t||[]),d=[];return u={},r("next"),r("throw"),r("return"),u[Symbol.asyncIterator]=function(){return this},u},t.__asyncDelegator=function(e){function t(t,i){e[t]&&(n[t]=function(n){return(r=!r)?{value:o(e[t](n)),done:"return"===t}:i?i(n):n})}var n,r;return n={},t("next"),t("throw",function(e){throw e}),t("return"),n[Symbol.iterator]=function(){return this},n},t.__asyncValues=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator];return t?t.call(e):r(e)},t.__makeTemplateObject=function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e};var l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e}},"6y8h":function(e,t,n){"use strict";var r=n("6Xbx"),i=n("E9/g"),o=n("8ofh"),l=n("NePw"),a=function(){function e(e,t){this.compare=e,this.keySelector=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.compare,this.keySelector))},e}(),s=function(e){function t(t,n,r){e.call(this,t),this.keySelector=r,this.hasKey=!1,"function"==typeof n&&(this.compare=n)}return Object(r.__extends)(t,e),t.prototype.compare=function(e,t){return e===t},t.prototype._next=function(e){var t=e;if(this.keySelector&&(t=Object(o.a)(this.keySelector)(e))===l.a)return this.destination.error(l.a.e);var n=!1;if(this.hasKey){if((n=Object(o.a)(this.compare)(this.key,t))===l.a)return this.destination.error(l.a.e)}else this.hasKey=!0;!1===Boolean(n)&&(this.key=t,this.destination.next(e))},t}(i.a);t.a=function(e,t){return function(e,t){return function(n){return n.lift(new a(e,t))}}(e,t)(this)}},"8Ut3":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(t,n){e.call(this),this.value=t,this.scheduler=n,this._isScalar=!0,n&&(this._isScalar=!1)}return Object(r.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.dispatch=function(e){var t=e.value,n=e.subscriber;e.done?n.complete():(n.next(t),n.closed||(e.done=!0,this.schedule(e)))},t.prototype._subscribe=function(e){var n=this.value,r=this.scheduler;if(r)return r.schedule(t.dispatch,0,{done:!1,value:n,subscriber:e});e.next(n),e.closed||e.complete()},t}(n("AP4T").a)},"8ofh":function(e,t,n){"use strict";function r(){try{return i.apply(this,arguments)}catch(e){return o.a.e=e,o.a}}t.a=function(e){return i=e,r};var i,o=n("NePw")},"8sYH":function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=n("TJLg"),l=r.has,a=r.key,s=function(e,t,n){if(l(e,t,n))return!0;var r=o(t);return null!==r&&s(e,r,n)};r.exp({hasMetadata:function(e,t){return s(e,i(t),arguments.length<3?void 0:a(arguments[2]))}})},"9ScN":function(e,t,n){"use strict";var r=n("51pc"),i=n("piOq"),o=n("P6IN"),l={};n("gxdV")(l,n("3r0D")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(l,{next:i(1,n)}),o(e,t+" Iterator")}},"9e9+":function(e,t){t.f={}.propertyIsEnumerable},"9wYb":function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},A1WY:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},ADVA:function(e,t,n){"use strict";function r(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n=e.length;if(0===n)throw new Error("list of properties cannot be empty.");return function(t){return Object(_.a)(function(e,t){return function(n){for(var r=n,i=0;i<t;i++){var o=r[e[i]];if(void 0===o)return;r=o}return r}}(e,n))(t)}}.apply(void 0,e)(this)}function i(e,t){void 0===t&&(t={});for(var n=Object.keys(e),r={},i=0;i<n.length;i++){var o=n[i];"function"==typeof e[o]&&(r[o]=e[o])}var l=Object.keys(r);return function(e,n){e=e||t;for(var i=!1,o={},a=0;a<l.length;a++){var s=l[a],u=e[s],c=(0,r[s])(u,n);o[s]=c,i=i||c!==u}return i?o:e}}function o(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){if(0===e.length)return t;var n=e[e.length-1];return e.slice(0,-1).reduceRight(function(e,t){return t(e)},n(t))}}function l(e,t){return Array.isArray(t)&&t.length>0?o.apply(null,t.concat([e])):e}function a(e,t){void 0===e&&(e={state:void 0});var n=t[0];return{state:(0,t[1])(e.state,n),action:n}}function s(e,t,n){return t instanceof d.InjectionToken?e.get(t):t}function u(e,t,n){return t.map(function(t,n){return t instanceof d.InjectionToken?e.get(t):t})}function c(e){return"function"==typeof e?e():e}var d=n("LMZF"),p=n("eoFs"),f=n("AP4T"),h=n("TO51"),m=n("Gcw1"),g=n("ozyc"),y=n("ThPn"),v=n("3k/+"),b=n("dmC+"),_=n("qqDE"),w=n("6y8h");n.d(t,"n",function(){return X}),n.d(t,"m",function(){return $}),n.d(t,"w",function(){return i}),n.d(t,"x",function(){return o}),n.d(t,"y",function(){return l}),n.d(t,"a",function(){return L}),n.d(t,"b",function(){return A}),n.d(t,"g",function(){return B}),n.d(t,"i",function(){return j}),n.d(t,"h",function(){return V}),n.d(t,"p",function(){return z}),n.d(t,"j",function(){return W}),n.d(t,"k",function(){return G}),n.d(t,"l",function(){return U}),n.d(t,"d",function(){return E}),n.d(t,"s",function(){return O}),n.d(t,"f",function(){return S}),n.d(t,"q",function(){return k}),n.d(t,"c",function(){return T}),n.d(t,"r",function(){return C}),n.d(t,"e",function(){return D}),n.d(t,"t",function(){return R}),n.d(t,"o",function(){return Q}),n.d(t,"v",function(){return c}),n.d(t,"u",function(){return s});var x=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),C=new d.InjectionToken("@ngrx/store Internal Initial State"),E=new d.InjectionToken("@ngrx/store Initial State"),S=new d.InjectionToken("@ngrx/store Reducer Factory"),O=new d.InjectionToken("@ngrx/store Reducer Factory Provider"),T=new d.InjectionToken("@ngrx/store Initial Reducers"),k=new d.InjectionToken("@ngrx/store Internal Initial Reducers"),D=new d.InjectionToken("@ngrx/store Meta Reducers"),I=new d.InjectionToken("@ngrx/store Store Features"),R=new d.InjectionToken("@ngrx/store Internal Store Reducers"),M=new d.InjectionToken("@ngrx/store Internal Feature Reducers"),P=new d.InjectionToken("@ngrx/store Internal Feature Reducers Token"),N=new d.InjectionToken("@ngrx/store Feature Reducers"),A="@ngrx/store/init",L=function(e){function t(){return e.call(this,{type:A})||this}return x(t,e),t.prototype.next=function(t){if(void 0===t)throw new TypeError("Actions must be objects");if(void 0===t.type)throw new TypeError("Actions must have a type property");e.prototype.next.call(this,t)},t.prototype.complete=function(){},t.prototype.ngOnDestroy=function(){e.prototype.complete.call(this)},t}(p.a),F=[L],j=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t}(f.a),V=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t}(L),z="@ngrx/store/update-reducers",B=function(e){function t(t,n,r,i){var o=e.call(this,i(r,n))||this;return o.dispatcher=t,o.initialState=n,o.reducers=r,o.reducerFactory=i,o}return x(t,e),t.prototype.addFeature=function(e){var t=e.reducers,n=e.initialState,r=e.key,i="function"==typeof t?function(e,r){return t(e||n,r)}:l(e.reducerFactory,e.metaReducers)(t,n);this.addReducer(r,i)},t.prototype.removeFeature=function(e){this.removeReducer(e.key)},t.prototype.addReducer=function(e,t){this.reducers=Object.assign({},this.reducers,(n={},n[e]=t,n)),this.updateReducers();var n},t.prototype.removeReducer=function(e){this.reducers=function(e,t){return Object.keys(e).filter(function(e){return e!==t}).reduce(function(t,n){return Object.assign(t,(r={},r[n]=e[n],r));var r},{})}(this.reducers,e),this.updateReducers()},t.prototype.updateReducers=function(){this.next(this.reducerFactory(this.reducers,this.initialState)),this.dispatcher.next({type:z})},t.prototype.ngOnDestroy=function(){this.complete()},t}(p.a),H=[B,{provide:j,useExisting:B},{provide:V,useExisting:L}],W=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t.prototype.ngOnDestroy=function(){this.complete()},t}(h.Subject),q=[W],U=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t}(f.a),G=function(e){function t(t,n,r,i){var o=e.call(this,i)||this,l=g.a.call(t,m.a),s=y.a.call(l,n),u=v.a.call(s,a,{state:i});return o.stateSubscription=u.subscribe({next:function(e){var t=e.action;o.next(e.state),r.next(t)}}),o}return x(t,e),t.prototype.ngOnDestroy=function(){this.stateSubscription.unsubscribe(),this.complete()},t}(p.a);G.INIT=A;var K=[G,{provide:U,useExisting:G}],$=function(e){function t(t,n,r){var i=e.call(this)||this;return i.actionsObserver=n,i.reducerManager=r,i.source=t,i}return x(t,e),t.prototype.select=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var i;if("string"==typeof e)i=r.call.apply(r,[this,e].concat(t));else{if("function"!=typeof e)throw new TypeError("Unexpected type '"+typeof e+"' in select operator, expected 'string' or 'function'");i=b.a.call(this,e)}return w.a.call(i)},t.prototype.lift=function(e){var n=new t(this,this.actionsObserver,this.reducerManager);return n.operator=e,n},t.prototype.dispatch=function(e){this.actionsObserver.next(e)},t.prototype.next=function(e){this.actionsObserver.next(e)},t.prototype.error=function(e){this.actionsObserver.error(e)},t.prototype.complete=function(){this.actionsObserver.complete()},t.prototype.addReducer=function(e,t){this.reducerManager.addReducer(e,t)},t.prototype.removeReducer=function(e){this.reducerManager.removeReducer(e)},t}(f.a),Z=[$],Q=function(e,t,n){},Y=function(){function e(e,t,n){this.features=e,this.featureReducers=t,this.reducerManager=n,e.map(function(e,n){var r=t.shift()[n];return Object.assign({},e,{reducers:r,initialState:c(e.initialState)})}).forEach(function(e){return n.addFeature(e)})}return e.prototype.ngOnDestroy=function(){var e=this;this.features.forEach(function(t){return e.reducerManager.removeFeature(t)})},e}(),X=function(){function e(){}return e.forRoot=function(e,t){return void 0===t&&(t={}),{ngModule:Q,providers:[{provide:C,useValue:t.initialState},{provide:E,useFactory:c,deps:[C]},{provide:k,useValue:e},{provide:R,useExisting:e instanceof d.InjectionToken?e:k},{provide:T,deps:[d.Injector,k,[new d.Inject(R)]],useFactory:s},{provide:D,useValue:t.metaReducers?t.metaReducers:[]},{provide:O,useValue:t.reducerFactory?t.reducerFactory:i},{provide:S,deps:[O,D],useFactory:l},F,H,q,K,Z]}},e.forFeature=function(e,t,n){return void 0===n&&(n={}),{ngModule:Y,providers:[{provide:I,multi:!0,useValue:{key:e,reducerFactory:n.reducerFactory?n.reducerFactory:i,metaReducers:n.metaReducers?n.metaReducers:[],initialState:n.initialState}},{provide:M,multi:!0,useValue:t},{provide:P,multi:!0,useExisting:t instanceof d.InjectionToken?t:M},{provide:N,multi:!0,deps:[d.Injector,M,[new d.Inject(P)]],useFactory:u}]}},e}()},AP4T:function(e,t,n){"use strict";var r=n("xIGM"),i=n("E9/g"),o=n("V7AE"),l=n("grVA"),a=n("mz3w"),s=n("PR+T");n.d(t,"a",function(){return u});var u=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this.operator,a=function(e,t,n){if(e){if(e instanceof i.a)return e;if(e[o.a])return e[o.a]()}return e||t||n?new i.a(e,t,n):new i.a(l.a)}(e,t,n);if(r?r.call(a,this.source):a.add(this.source?this._subscribe(a):this._trySubscribe(a)),a.syncErrorThrowable&&(a.syncErrorThrowable=!1,a.syncErrorThrown))throw a.syncErrorValue;return a},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.syncErrorThrown=!0,e.syncErrorValue=t,e.error(t)}},e.prototype.forEach=function(e,t){var n=this;if(t||(r.a.Rx&&r.a.Rx.config&&r.a.Rx.config.Promise?t=r.a.Rx.config.Promise:r.a.Promise&&(t=r.a.Promise)),!t)throw new Error("no Promise impl found");return new t(function(t,r){var i;i=n.subscribe(function(t){if(i)try{e(t)}catch(e){r(e),i.unsubscribe()}else e(t)},r,t)})},e.prototype._subscribe=function(e){return this.source.subscribe(e)},e.prototype[a.a]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return 0===e.length?this:function(e){return e?1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}:s.a}(e)(this)},e.prototype.toPromise=function(e){var t=this;if(e||(r.a.Rx&&r.a.Rx.config&&r.a.Rx.config.Promise?e=r.a.Rx.config.Promise:r.a.Promise&&(e=r.a.Promise)),!e)throw new Error("no Promise impl found");return new e(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}()},B1iP:function(e,t,n){"use strict";t.a=function(e){return"function"==typeof e}},BCYq:function(e,t,n){var r=n("pa70"),i=n("Wo2w"),o=n("RT4T"),l=n("rppw"),a=n("UKZQ");e.exports=function(e,t){var n=1==e,s=2==e,u=3==e,c=4==e,d=6==e,p=5==e||d,f=t||a;return function(t,a,h){for(var m,g,y=o(t),v=i(y),b=r(a,h,3),_=l(v.length),w=0,x=n?f(t,_):s?f(t,0):void 0;_>w;w++)if((p||w in v)&&(m=v[w],g=b(m,w,y),e))if(n)x[w]=g;else if(g)switch(e){case 3:return!0;case 5:return m;case 6:return w;case 2:x.push(m)}else if(c)return!1;return d?-1:u||c?c:x}}},BQSv:function(e,t,n){var r=n("JXkd"),i=n("ptrv").document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},BThc:function(e,t,n){"use strict";var r=n("2kLc");t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(t){return t.lift.call(r.a.apply(void 0,[t].concat(e)))}}.apply(void 0,e)(this)},n.d(t,!1,function(){return r.a})},CDXM:function(e,t,n){var r=n("ptrv"),i=n("b4gG"),o=n("gxdV"),l=n("lfBE"),a=n("pa70"),s=function(e,t,n){var u,c,d,p,f=e&s.F,h=e&s.G,m=e&s.P,g=e&s.B,y=h?r:e&s.S?r[t]||(r[t]={}):(r[t]||{}).prototype,v=h?i:i[t]||(i[t]={}),b=v.prototype||(v.prototype={});h&&(n=t);for(u in n)d=((c=!f&&y&&void 0!==y[u])?y:n)[u],p=g&&c?a(d,r):m&&"function"==typeof d?a(Function.call,d):d,y&&l(y,u,d,e&s.U),v[u]!=d&&o(v,u,p),m&&b[u]!=d&&(b[u]=d)};r.core=i,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},"E9/g":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("6Xbx"),i=n("B1iP"),o=n("qLnt"),l=n("grVA"),a=n("V7AE"),s=function(e){function t(n,r,i){switch(e.call(this),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=l.a;break;case 1:if(!n){this.destination=l.a;break}if("object"==typeof n){n instanceof t?(this.destination=n,this.destination.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,n));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,n,r,i)}}return Object(r.__extends)(t,e),t.prototype[a.a]=function(){return this},t.create=function(e,n,r){var i=new t(e,n,r);return i.syncErrorThrowable=!1,i},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parent,t=this._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=e,this._parents=t,this},t}(o.a),u=function(e){function t(t,n,r,o){e.call(this),this._parentSubscriber=t;var a,s=this;Object(i.a)(n)?a=n:n&&(a=n.next,r=n.error,o=n.complete,n!==l.a&&(s=Object.create(n),Object(i.a)(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=a,this._error=r,this._complete=o}return Object(r.__extends)(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber;if(this._error)t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else{if(!t.syncErrorThrowable)throw this.unsubscribe(),e;t.syncErrorValue=e,t.syncErrorThrown=!0,this.unsubscribe()}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){throw this.unsubscribe(),e}},t.prototype.__tryOrSetError=function(e,t,n){try{t.call(this._context,n)}catch(t){return e.syncErrorValue=t,e.syncErrorThrown=!0,!0}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(s)},"Ecq+":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(t){e.call(this),this.scheduler=t}return Object(r.__extends)(t,e),t.create=function(e){return new t(e)},t.dispatch=function(e){e.subscriber.complete()},t.prototype._subscribe=function(e){var n=this.scheduler;if(n)return n.schedule(t.dispatch,0,{subscriber:e});e.complete()},t}(n("AP4T").a)},Ed9o:function(e,t,n){var r=n("ptrv").document;e.exports=r&&r.documentElement},GTlS:function(e,t,n){"use strict";var r=n("6Xbx"),i=n("xIGM"),o=function(e){function t(t,n){e.call(this)}return Object(r.__extends)(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(n("qLnt").a);n.d(t,"a",function(){return l});var l=function(e){function t(t,n){e.call(this,t,n),this.scheduler=t,this.work=n,this.pending=!1}return Object(r.__extends)(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e,this.pending=!0;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,t)),this.delay=t,this.id=this.id||this.requestAsyncId(r,this.id,t),this},t.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),i.a.setInterval(e.flush.bind(e,this),n)},t.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;i.a.clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var n=!1,r=void 0;try{this.work(e)}catch(e){n=!0,r=!!e&&e||new Error(e)}if(n)return this.unsubscribe(),r},t.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},t}(o)},Gcw1:function(e,t,n){"use strict";var r=n("6Xbx"),i=function(e){function t(t,n){e.call(this,t,n),this.scheduler=t,this.work=n}return Object(r.__extends)(t,e),t.prototype.schedule=function(t,n){return void 0===n&&(n=0),n>0?e.prototype.schedule.call(this,t,n):(this.delay=n,this.state=t,this.scheduler.flush(this),this)},t.prototype.execute=function(t,n){return n>0||this.closed?e.prototype.execute.call(this,t,n):this._execute(t,n)},t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?e.prototype.requestAsyncId.call(this,t,n,r):t.flush(this)},t}(n("GTlS").a),o=function(e){function t(){e.apply(this,arguments)}return Object(r.__extends)(t,e),t}(n("wclm").a);n.d(t,"a",function(){return l});var l=new o(i)},GpNi:function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("5jKg")},H0Ur:function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=n("TO51"),l=function(){function e(){this.dragStartSource=new o.Subject,this.dragStopSource=new o.Subject,this.dragStart$=this.dragStartSource.asObservable(),this.dragStop$=this.dragStopSource.asObservable()}return e.prototype.startDrag=function(e){this.dragStartSource.next(e)},e.prototype.stopDrag=function(e){this.dragStopSource.next(e)},e}();l=r([i.Injectable()],l),t.TreeDragDropService=l},HCkn:function(e,t,n){var r=n("Ps07"),i=n("WGJ/"),o=n("gBtn"),l=n("+pQw"),a=n("TJLg"),s=o.keys,u=o.key,c=function(e,t){var n=s(e,t),o=a(e);if(null===o)return n;var l=c(o,t);return l.length?n.length?i(new r(n.concat(l))):l:n};o.exp({getMetadataKeys:function(e){return c(l(e),arguments.length<2?void 0:u(arguments[1]))}})},IJ3P:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.has,l=r.key;r.exp({hasOwnMetadata:function(e,t){return o(e,i(t),arguments.length<3?void 0:l(arguments[2]))}})},Iclu:function(e,t,n){var r=n("ptrv"),i="__core-js_shared__",o=r[i]||(r[i]={});e.exports=function(e){return o[e]||(o[e]={})}},JXkd:function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},Jsyr:function(e,t,n){"use strict";var r=n("6Xbx"),i=n("AP4T"),o=n("Ecq+"),l=n("1j/l"),a=n("qgI0"),s=n("lI6h"),u=function(e){function t(t,n){e.call(this),this.sources=t,this.resultSelector=n}return Object(r.__extends)(t,e),t.create=function(){for(var e=[],n=0;n<arguments.length;n++)e[n-0]=arguments[n];if(null===e||0===arguments.length)return new o.a;var r=null;return"function"==typeof e[e.length-1]&&(r=e.pop()),1===e.length&&Object(l.a)(e[0])&&(e=e[0]),0===e.length?new o.a:new t(e,r)},t.prototype._subscribe=function(e){return new c(e,this.sources,this.resultSelector)},t}(i.a),c=function(e){function t(t,n,r){e.call(this,t),this.sources=n,this.resultSelector=r,this.completed=0,this.haveValues=0;var i=n.length;this.total=i,this.values=new Array(i);for(var o=0;o<i;o++){var l=n[o],s=Object(a.a)(this,l,null,o);s&&(s.outerIndex=o,this.add(s))}}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.values[n]=t,i._hasValue||(i._hasValue=!0,this.haveValues++)},t.prototype.notifyComplete=function(e){var t=this.destination,n=this.haveValues,r=this.resultSelector,i=this.values,o=i.length;if(e._hasValue){if(this.completed++,this.completed===o){if(n===o){var l=r?r.apply(this,i):i;t.next(l)}t.complete()}}else t.complete()},t}(s.a);n.d(t,"a",function(){return d});var d=u.create},KGrn:function(e,t){e.exports=!1},KM3d:function(e,t,n){var r=n("9wYb"),i=Math.max,o=Math.min;e.exports=function(e,t){return(e=r(e))<0?i(e+t,0):o(e,t)}},KRwF:function(e,t,n){"use strict";function r(e){var t=e.subscriber;t.closed||(t.next(e.value),t.complete())}function i(e){var t=e.subscriber;t.closed||t.error(e.err)}n.d(t,"a",function(){return a});var o=n("6Xbx"),l=n("xIGM"),a=function(e){function t(t,n){e.call(this),this.promise=t,this.scheduler=n}return Object(o.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.prototype._subscribe=function(e){var t=this,n=this.promise,o=this.scheduler;if(null==o)this._isScalar?e.closed||(e.next(this.value),e.complete()):n.then(function(n){t.value=n,t._isScalar=!0,e.closed||(e.next(n),e.complete())},function(t){e.closed||e.error(t)}).then(null,function(e){l.a.setTimeout(function(){throw e})});else if(this._isScalar){if(!e.closed)return o.schedule(r,0,{value:this.value,subscriber:e})}else n.then(function(n){t.value=n,t._isScalar=!0,e.closed||e.add(o.schedule(r,0,{value:n,subscriber:e}))},function(t){e.closed||e.add(o.schedule(i,0,{err:t,subscriber:e}))}).then(null,function(e){l.a.setTimeout(function(){throw e})})},t}(n("AP4T").a)},"KpI+":function(e,t,n){var r=n("lexG"),i=n("3r0D")("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},KpXt:function(e,t,n){"use strict";var r=n("ptrv"),i=n("tose"),o=n("V+0c"),l=n("3r0D")("species");e.exports=function(e){var t=r[e];o&&t&&!t[l]&&i.f(t,l,{configurable:!0,get:function(){return this}})}},LMZF:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){function r(e,t,n,r){function o(e){if(this instanceof o)return l.call(this,e),this;var t=new o(e),n=function(e){return(e.hasOwnProperty(Pr)?e[Pr]:Object.defineProperty(e,Pr,{value:[]})[Pr]).push(t),e};return r&&r(n),n}var l=i(t);return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o}function i(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(e){var r=e.apply(void 0,t);for(var i in r)this[i]=r[i]}}}function o(e,t,n){function r(){function e(e,t,n){for(var r=e.hasOwnProperty(Nr)?e[Nr]:Object.defineProperty(e,Nr,{value:[]})[Nr];r.length<=n;)r.push(null);return(r[n]=r[n]||[]).push(i),e}for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(this instanceof r)return o.apply(this,t),this;var i=new((l=r).bind.apply(l,[void 0].concat(t)));return e.annotation=i,e;var l}var o=i(t);return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=e,r.annotationCls=r,r}function l(e,t,n){function r(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(this instanceof r)return o.apply(this,e),this;var n=new((i=r).bind.apply(i,[void 0].concat(e)));return function(e,t){var r=e.constructor,i=r.hasOwnProperty(Ar)?r[Ar]:Object.defineProperty(r,Ar,{value:{}})[Ar];i[t]=i.hasOwnProperty(t)&&i[t]||[],i[t].unshift(n)};var i}var o=i(t);return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=e,r.annotationCls=r,r}function a(e){return null==e||e===Wr.Default}function s(){if(!fi){var e=pi.Symbol;if(e&&e.iterator)fi=e.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),n=0;n<t.length;++n){var r=t[n];"entries"!==r&&"size"!==r&&Map.prototype[r]===Map.prototype.entries&&(fi=r)}}return fi}function u(e){Zone.current.scheduleMicroTask("scheduleMicrotask",e)}function c(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)}function d(e){if("string"==typeof e)return e;if(e instanceof Array)return"["+e.map(d).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return""+e.overriddenName;if(e.name)return""+e.name;var t=e.toString();if(null==t)return""+t;var n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function p(e){return e.__forward_ref__=p,e.toString=function(){return d(this())},e}function f(e){return"function"==typeof e&&e.hasOwnProperty("__forward_ref__")&&e.__forward_ref__===p?e():e}function h(e){return v("Cannot mix multi providers and regular providers",e)}function m(e,t){if(t)if((t=f(t))instanceof Array)for(var n=0;n<t.length;n++)m(e,t[n]);else{if("function"==typeof t)throw v("Function/Class not supported",t);if(!t||"object"!=typeof t||!t.provide)throw v("Unexpected provider",t);var r=f(t.provide),i=function(e){var t=function(e){var t=bi,n=e.deps;if(n&&n.length){t=[];for(var r=0;r<n.length;r++){var i=6;if((s=f(n[r]))instanceof Array)for(var o=0,l=s;o<l.length;o++){var a=l[o];a instanceof oi||a==oi?i|=1:a instanceof si||a==si?i&=-3:a instanceof ai||a==ai?i&=-5:s=a instanceof ii?a.token:f(a)}t.push({token:s,options:i})}}else if(e.useExisting){var s;t=[{token:s=f(e.useExisting),options:6}]}else if(!(n||Ei in e))throw v("'deps' required",e);return t}(e),n=vi,r=bi,i=!1,o=f(e.provide);if(Ei in e)r=e.useValue;else if(e.useFactory)n=e.useFactory;else if(e.useExisting);else if(e.useClass)i=!0,n=f(e.useClass);else{if("function"!=typeof o)throw v("StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable",e);i=!0,n=o}return{deps:t,fn:n,useNew:i,value:r}}(t);if(!0===t.multi){var o=e.get(r);if(o){if(o.fn!==wi)throw h(r)}else e.set(r,o={token:t.provide,deps:[],useNew:!1,fn:wi,value:bi});o.deps.push({token:r=t,options:6})}var l=e.get(r);if(l&&l.fn==wi)throw h(r);e.set(r,i)}}function g(e,t,n,r,i){try{return function(e,t,n,r,i){var o;if(t){if((o=t.value)==_i)throw Error(ki+"Circular dependency");if(o===bi){t.value=_i;var l=t.useNew,a=t.fn,s=t.deps,u=bi;if(s.length){u=[];for(var c=0;c<s.length;c++){var d=s[c],p=d.options,f=2&p?n.get(d.token):void 0;u.push(g(d.token,f,n,f||4&p?r:Oi,1&p?null:yi.THROW_IF_NOT_FOUND))}}t.value=o=l?new((h=a).bind.apply(h,[void 0].concat(u))):a.apply(void 0,u)}}else o=r.get(e,i);return o;var h}(e,t,n,r,i)}catch(n){throw n instanceof Error||(n=new Error(n)),(n[Si]=n[Si]||[]).unshift(e),t&&t.value==_i&&(t.value=bi),n}}function y(e,t){e=e&&"\n"===e.charAt(0)&&e.charAt(1)==ki?e.substr(2):e;var n=d(t);if(t instanceof Array)n=t.map(d).join(" -> ");else if("object"==typeof t){var r=[];for(var i in t)if(t.hasOwnProperty(i)){var o=t[i];r.push(i+":"+("string"==typeof o?JSON.stringify(o):d(o)))}n="{"+r.join(", ")+"}"}return"StaticInjectorError["+n+"]: "+e.replace(Ti,"\n  ")}function v(e,t){return new Error(y(e,t))}function b(e){return e[Ii]}function _(e){return e[Ri]}function w(e){return e.length>1?" ("+function(e){for(var t=[],n=0;n<e.length;++n){if(t.indexOf(e[n])>-1)return t.push(e[n]),t;t.push(e[n])}return t}(e.slice().reverse()).map(function(e){return d(e.token)}).join(" -> ")+")":""}function x(e,t,n,r){var i=[t],o=n(i),l=r?function(e,t){var n=o+" caused by: "+(t instanceof Error?t.message:t),r=Error(n);return r[Ri]=t,r}(0,r):Error(o);return l.addKey=C,l.keys=i,l.injectors=[e],l.constructResolvingMessage=n,l[Ri]=r,l}function C(e,t){this.injectors.push(e),this.keys.push(t),this.message=this.constructResolvingMessage(this.keys)}function E(e,t){for(var n=[],r=0,i=t.length;r<i;r++){var o=t[r];n.push(o&&0!=o.length?o.map(d).join(" "):"?")}return Error("Cannot resolve all parameters for '"+d(e)+"'("+n.join(", ")+"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '"+d(e)+"' is decorated with Injectable.")}function S(e,t){return Error("Cannot mix multi providers and regular providers, got: "+e+" "+t)}function O(e){return"function"==typeof e}function T(e){return e?e.map(function(e){var t=e.type.annotationCls;return new(t.bind.apply(t,[void 0].concat(e.args?e.args:[])))}):[]}function k(e){var t=Object.getPrototypeOf(e.prototype);return(t?t.constructor:null)||Object}function D(e){return new Hi(Ni.get(e.provide),[function(e){var t,n;if(e.useClass){var r=f(e.useClass);t=Vi.factory(r),n=M(r)}else e.useExisting?(t=function(e){return e},n=[zi.fromKey(Ni.get(e.useExisting))]):e.useFactory?(t=e.useFactory,n=function(e,t){if(t){var n=t.map(function(e){return[e]});return t.map(function(t){return P(e,t,n)})}return M(e)}(e.useFactory,e.deps)):(t=function(){return e.useValue},n=Bi);return new Wi(t,n)}(e)],e.multi||!1)}function I(e){var t=function(e,t){for(var n=0;n<e.length;n++){var r=e[n],i=t.get(r.key.id);if(i){if(r.multiProvider!==i.multiProvider)throw S(i,r);if(r.multiProvider)for(var o=0;o<r.resolvedFactories.length;o++)i.resolvedFactories.push(r.resolvedFactories[o]);else t.set(r.key.id,r)}else{var l=void 0;l=r.multiProvider?new Hi(r.key,r.resolvedFactories.slice(),r.multiProvider):r,t.set(r.key.id,l)}}return t}(R(e,[]).map(D),new Map);return Array.from(t.values())}function R(e,t){return e.forEach(function(e){if(e instanceof Li)t.push({provide:e,useClass:e});else if(e&&"object"==typeof e&&void 0!==e.provide)t.push(e);else{if(!(e instanceof Array))throw function(e){return Error("Invalid provider - only instances of Provider and Type are allowed, got: "+e)}(e);R(e,t)}}),t}function M(e){var t=Vi.parameters(e);if(!t)return[];if(t.some(function(e){return null==e}))throw E(e,t);return t.map(function(n){return P(e,n,t)})}function P(e,t,n){var r=null,i=!1;if(!Array.isArray(t))return N(t instanceof ii?t.token:t,i,null);for(var o=null,l=0;l<t.length;++l){var a=t[l];a instanceof Li?r=a:a instanceof ii?r=a.token:a instanceof oi?i=!0:a instanceof ai||a instanceof si?o=a:a instanceof Mr&&(r=a)}if(null!=(r=f(r)))return N(r,i,o);throw E(e,n)}function N(e,t,n){return new zi(Ni.get(e),t,n)}function A(e){return!!e&&"function"==typeof e.then}function L(e){return!!e&&"function"==typeof e.subscribe}function F(){return""+j()+j()+j()}function j(){return String.fromCharCode(97+Math.floor(25*Math.random()))}function V(){throw new Error("Runtime compiler is not loaded")}function z(e){var t=Error("No component factory found for "+d(e)+". Did you add it to @NgModule.entryComponents?");return t[so]=e,t}function B(){var e=pi.wtf;return!(!e||!(wr=e.trace)||(xr=wr.events,0))}function H(e,t){return void 0===t&&(t=null),xr.createScope(e,t)}function W(e,t){return wr.leaveScope(e,t),t}function q(e,t){return wr.beginTimeRange(e,t)}function U(e){wr.endTimeRange(e)}function G(e,t){return null}function K(){}function $(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(function(){return e.onStable.emit(null)})}finally{e.isStable=!0}}}function Z(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Q(e){e._nesting--,$(e)}function Y(e){To=e}function X(){if(Do)throw new Error("Cannot enable prod mode after platform setup.");ko=!1}function J(){return Do=!0,ko}function ee(e){if(Cr&&!Cr.destroyed&&!Cr.injector.get(Io,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");Cr=e.get(Mo);var t=e.get(Yi,null);return t&&t.forEach(function(e){return e()}),Cr}function te(e,t,n){void 0===n&&(n=[]);var r=new Mr("Platform: "+t);return function(t){void 0===t&&(t=[]);var i=ie();return i&&!i.injector.get(Io,!1)||(e?e(n.concat(t).concat({provide:r,useValue:!0})):ee(yi.create(n.concat(t).concat({provide:r,useValue:!0})))),ne(r)}}function ne(e){var t=ie();if(!t)throw new Error("No platform exists!");if(!t.injector.get(e,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return t}function re(){Cr&&!Cr.destroyed&&Cr.destroy()}function ie(){return Cr&&!Cr.destroyed?Cr:null}function oe(e,t){return e=Array.isArray(t)?t.reduce(oe,e):Object(Tr.__assign)({},e,t)}function le(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}function ae(e,t){var n=Wo.get(e);if(n)throw new Error("Duplicate module registered for "+e+" - "+n.moduleType.name+" vs "+t.moduleType.name);Wo.set(e,t)}function se(e){var t=Wo.get(e);if(!t)throw new Error("No module with ID "+e+" loaded");return t}function ue(e){return e.reduce(function(e,t){var n=Array.isArray(t)?ue(t):t;return e.concat(n)},[])}function ce(e,t,n){if(!e)throw new Error("Cannot find '"+n+"' in '"+t+"'");return e}function de(e){return e.map(function(e){return e.nativeElement})}function pe(e,t,n){e.childNodes.forEach(function(e){e instanceof el&&(t(e)&&n.push(e),pe(e,t,n))})}function fe(e,t,n){e instanceof el&&e.childNodes.forEach(function(e){t(e)&&n.push(e),e instanceof el&&fe(e,t,n)})}function he(e){return tl.get(e)||null}function me(e){tl.set(e.nativeNode,e)}function ge(e,t){var n=ye(e),r=ye(t);return n&&r?function(t,n,r){for(var i=e[s()](),o=n[s()]();;){var l=i.next(),a=o.next();if(l.done&&a.done)return!0;if(l.done||a.done)return!1;if(!r(l.value,a.value))return!1}}(0,t,ge):!(n||!e||"object"!=typeof e&&"function"!=typeof e||r||!t||"object"!=typeof t&&"function"!=typeof t)||c(e,t)}function ye(e){return!!ve(e)&&(Array.isArray(e)||!(e instanceof Map)&&s()in e)}function ve(e){return null!==e&&("function"==typeof e||"object"==typeof e)}function be(e,t,n){var r=e.previousIndex;if(null===r)return r;var i=0;return n&&r<n.length&&(i=n[r]),r+t+i}function _e(){return yl}function we(){return vl}function xe(e){return e||"en-US"}function Ce(e,t,n){var r=e.state,i=1792&r;return i===t?(e.state=-1793&r|n,e.initIndex=-1,!0):i===n}function Ee(e,t,n){return(1792&e.state)===t&&e.initIndex<=n&&(e.initIndex=n+1,!0)}function Se(e,t){return e.nodes[t]}function Oe(e,t){return e.nodes[t]}function Te(e,t){return e.nodes[t]}function ke(e,t){return e.nodes[t]}function De(e,t){return e.nodes[t]}function Ie(e,t,n,r){var i="ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '"+t+"'. Current value: '"+n+"'.";return r&&(i+=" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?"),function(e,t){var n=new Error(e);return Re(n,t),n}(i,e)}function Re(e,t){e[Ii]=t,e[Mi]=t.logError.bind(t)}function Me(e){return new Error("ViewDestroyedError: Attempt to use a destroyed view: "+e)}function Pe(e){var t=Il.get(e);return t||(t=d(e)+"_"+Il.size,Il.set(e,t)),t}function Ne(e,t,n,r){if(r instanceof nl){r=r.wrapped;var i=e.def.nodes[t].bindingIndex+n,o=e.oldValues[i];o instanceof nl&&(o=o.wrapped),e.oldValues[i]=new nl(o)}return r}function Ae(e){return{id:Rl,styles:e.styles,encapsulation:e.encapsulation,data:e.data}}function Le(e,t,n,r){return!(!(2&e.state)&&c(e.oldValues[t.bindingIndex+n],r))}function Fe(e,t,n,r){return!!Le(e,t,n,r)&&(e.oldValues[t.bindingIndex+n]=r,!0)}function je(e,t,n,r){var i=e.oldValues[t.bindingIndex+n];if(1&e.state||!ge(i,r))throw Ie(kl.createDebugContext(e,t.nodeIndex),i,r,0!=(1&e.state))}function Ve(e){for(var t=e;t;)2&t.def.flags&&(t.state|=8),t=t.viewContainerParent||t.parent}function ze(e,t){for(var n=e;n&&n!==t;)n.state|=64,n=n.viewContainerParent||n.parent}function Be(e,t,n,r){try{return Ve(33554432&e.def.nodes[t].flags?Oe(e,t).componentView:e),kl.handleEvent(e,t,n,r)}catch(t){e.root.errorHandler.handleError(t)}}function He(e){return e.parent?Oe(e.parent,e.parentNodeDef.nodeIndex):null}function We(e){return e.parent?e.parentNodeDef.parent:null}function qe(e,t){switch(201347067&t.flags){case 1:return Oe(e,t.nodeIndex).renderElement;case 2:return Se(e,t.nodeIndex).renderText}}function Ue(e,t){return e?e+":"+t:t}function Ge(e){return!!e.parent&&!!(32768&e.parentNodeDef.flags)}function Ke(e){return!(!e.parent||32768&e.parentNodeDef.flags)}function $e(e){return 1<<e%32}function Ze(e){var t={},n=0,r={};return e&&e.forEach(function(e){var i=e[0],o=e[1];"number"==typeof i?(t[i]=o,n|=$e(i)):r[i]=o}),{matchedQueries:t,references:r,matchedQueryIds:n}}function Qe(e){return e.map(function(e){var t,n;return Array.isArray(e)?(n=e[0],t=e[1]):(n=0,t=e),{flags:n,token:t,tokenKey:Pe(t)}})}function Ye(e,t,n){var r=n.renderParent;return r?0==(1&r.flags)||0==(33554432&r.flags)||r.element.componentRendererType&&r.element.componentRendererType.encapsulation===ti.Native?Oe(e,n.renderParent.nodeIndex).renderElement:void 0:t}function Xe(e){var t=Nl.get(e);return t||((t=e(function(){return Dl})).factory=e,Nl.set(e,t)),t}function Je(e,t,n,r,i){3===t&&(n=e.renderer.parentNode(qe(e,e.def.lastRenderRootNode))),et(e,t,0,e.def.nodes.length-1,n,r,i)}function et(e,t,n,r,i,o,l){for(var a=n;a<=r;a++){var s=e.def.nodes[a];11&s.flags&&nt(e,s,t,i,o,l),a+=s.childCount}}function tt(e,t,n,r,i,o){for(var l=e;l&&!Ge(l);)l=l.parent;for(var a=l.parent,s=We(l),u=s.nodeIndex+s.childCount,c=s.nodeIndex+1;c<=u;c++){var d=a.def.nodes[c];d.ngContentIndex===t&&nt(a,d,n,r,i,o),c+=d.childCount}if(!a.parent){var p=e.root.projectableNodes[t];if(p)for(c=0;c<p.length;c++)rt(e,p[c],n,r,i,o)}}function nt(e,t,n,r,i,o){if(8&t.flags)tt(e,t.ngContent.index,n,r,i,o);else{var l=qe(e,t);if(3===n&&33554432&t.flags&&48&t.bindingFlags?(16&t.bindingFlags&&rt(e,l,n,r,i,o),32&t.bindingFlags&&rt(Oe(e,t.nodeIndex).componentView,l,n,r,i,o)):rt(e,l,n,r,i,o),16777216&t.flags)for(var a=Oe(e,t.nodeIndex).viewContainer._embeddedViews,s=0;s<a.length;s++)Je(a[s],n,r,i,o);1&t.flags&&!t.element.name&&et(e,n,t.nodeIndex+1,t.nodeIndex+t.childCount,r,i,o)}}function rt(e,t,n,r,i,o){var l=e.renderer;switch(n){case 1:l.appendChild(r,t);break;case 2:l.insertBefore(r,t,i);break;case 3:l.removeChild(r,t);break;case 0:o.push(t)}}function it(e){if(":"===e[0]){var t=e.match(Al);return[t[1],t[2]]}return["",e]}function ot(e){for(var t=0,n=0;n<e.length;n++)t|=e[n].flags;return t}function lt(e,t){for(var n="",r=0;r<2*e;r+=2)n=n+t[r]+st(t[r+1]);return n+t[2*e]}function at(e,t,n,r,i,o,l,a,s,u,c,d,p,f,h,m,g,y,v,b){switch(e){case 1:return t+st(n)+r;case 2:return t+st(n)+r+st(i)+o;case 3:return t+st(n)+r+st(i)+o+st(l)+a;case 4:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u;case 5:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d;case 6:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f;case 7:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f+st(h)+m;case 8:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f+st(h)+m+st(g)+y;case 9:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f+st(h)+m+st(g)+y+st(v)+b;default:throw new Error("Does not support more than 9 expressions")}}function st(e){return null!=e?e.toString():""}function ut(e,t,n,r,i,o){e|=1;var l=Ze(t);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:e,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:l.matchedQueries,matchedQueryIds:l.matchedQueryIds,references:l.references,ngContentIndex:n,childCount:r,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:o?Xe(o):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:i||Dl},provider:null,text:null,query:null,ngContent:null}}function ct(e,t,n,r,i,o,l,a,s,u,c,d){void 0===l&&(l=[]),u||(u=Dl);var p=Ze(n),f=p.matchedQueries,h=p.references,m=p.matchedQueryIds,g=null,y=null;o&&(g=(I=it(o))[0],y=I[1]),a=a||[];for(var v=new Array(a.length),b=0;b<a.length;b++){var _=a[b],w=_[0],x=_[2],C=it(_[1]),E=C[1],S=void 0,O=void 0;switch(15&w){case 4:O=x;break;case 1:case 8:S=x}v[b]={flags:w,ns:C[0],name:E,nonMinifiedName:E,securityContext:S,suffix:O}}s=s||[];var T=new Array(s.length);for(b=0;b<s.length;b++){var k=s[b];T[b]={type:0,target:k[0],eventName:k[1],propName:null}}var D=(l=l||[]).map(function(e){var t=e[1],n=it(e[0]);return[n[0],n[1],t]});return d=function(e){if(e&&e.id===Rl){var t=null!=e.encapsulation&&e.encapsulation!==ti.None||e.styles.length||Object.keys(e.data).length;e.id=t?"c"+Pl++:Ml}return e&&e.id===Ml&&(e=null),e||null}(d),c&&(t|=33554432),t|=1,{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:f,matchedQueryIds:m,references:h,ngContentIndex:r,childCount:i,bindings:v,bindingFlags:ot(v),outputs:T,element:{ns:g,name:y,attrs:D,template:null,componentProvider:null,componentView:c||null,componentRendererType:d,publicProviders:null,allProviders:null,handleEvent:u||Dl},provider:null,text:null,query:null,ngContent:null};var I}function dt(e,t,n){var r,i=n.element,o=e.root.selectorOrNode,l=e.renderer;if(e.parent||!o){r=i.name?l.createElement(i.name,i.ns):l.createComment("");var a=Ye(e,t,n);a&&l.appendChild(a,r)}else r=l.selectRootElement(o);if(i.attrs)for(var s=0;s<i.attrs.length;s++){var u=i.attrs[s];l.setAttribute(r,u[1],u[2],u[0])}return r}function pt(e,t,n,r){for(var i=0;i<n.outputs.length;i++){var o=n.outputs[i],l=function(e,t,n){return function(r){return Be(e,t,n,r)}}(e,n.nodeIndex,Ue(o.target,o.eventName)),a=o.target,s=e;"component"===o.target&&(a=null,s=t);var u=s.renderer.listen(a||r,o.eventName,l);e.disposables[n.outputIndex+i]=u}}function ft(e,t,n,r){if(!Fe(e,t,n,r))return!1;var i=t.bindings[n],o=Oe(e,t.nodeIndex),l=o.renderElement,a=i.name;switch(15&i.flags){case 1:!function(e,t,n,r,o,l){var a=i.securityContext,s=a?e.root.sanitizer.sanitize(a,l):l;s=null!=s?s.toString():null;var u=e.renderer;null!=l?u.setAttribute(n,o,s,r):u.removeAttribute(n,o,r)}(e,0,l,i.ns,a,r);break;case 2:!function(t,n,i,o){var l=e.renderer;r?l.addClass(n,i):l.removeClass(n,i)}(0,l,a);break;case 4:!function(e,t,n,i,o){var l=e.root.sanitizer.sanitize(Sl.STYLE,r);if(null!=l){l=l.toString();var a=t.suffix;null!=a&&(l+=a)}else l=null;var s=e.renderer;null!=l?s.setStyle(n,i,l):s.removeStyle(n,i)}(e,i,l,a);break;case 8:!function(e,t,n,r,o){var l=i.securityContext,a=l?e.root.sanitizer.sanitize(l,o):o;e.renderer.setProperty(n,r,a)}(33554432&t.flags&&32&i.flags?o.componentView:e,0,l,a,r)}return!0}function ht(e,t,n,r){return n=f(n),{index:-1,deps:Qe(r),flags:e,token:t,value:n}}function mt(e){for(var t={},n=0;n<e.length;n++){var r=e[n];r.index=n,t[Pe(r.token)]=r}return{factory:null,providersByKey:t,providers:e}}function gt(e,t,n){if(void 0===n&&(n=yi.THROW_IF_NOT_FOUND),8&t.flags)return t.token;if(2&t.flags&&(n=null),1&t.flags)return e._parent.get(t.token,n);var r=t.tokenKey;switch(r){case Vl:case zl:return e}var i=e._def.providersByKey[r];if(i){var o=e._providers[i.index];return void 0===o&&(o=e._providers[i.index]=yt(e,i)),o===jl?void 0:o}return e._parent.get(t.token,n)}function yt(e,t){var n;switch(201347067&t.flags){case 512:n=function(e,t,n){var r=n.length;switch(r){case 0:return new t;case 1:return new t(gt(e,n[0]));case 2:return new t(gt(e,n[0]),gt(e,n[1]));case 3:return new t(gt(e,n[0]),gt(e,n[1]),gt(e,n[2]));default:for(var i=new Array(r),o=0;o<r;o++)i[o]=gt(e,n[o]);return new(t.bind.apply(t,[void 0].concat(i)))}}(e,t.value,t.deps);break;case 1024:n=function(e,t,n){var r=n.length;switch(r){case 0:return t();case 1:return t(gt(e,n[0]));case 2:return t(gt(e,n[0]),gt(e,n[1]));case 3:return t(gt(e,n[0]),gt(e,n[1]),gt(e,n[2]));default:for(var i=Array(r),o=0;o<r;o++)i[o]=gt(e,n[o]);return t.apply(void 0,i)}}(e,t.value,t.deps);break;case 2048:n=gt(e,t.deps[0]);break;case 256:n=t.value}return void 0===n?jl:n}function vt(e,t){var n=e.viewContainer._embeddedViews;if((null==t||t>=n.length)&&(t=n.length-1),t<0)return null;var r=n[t];return r.viewContainerParent=null,xt(n,t),kl.dirtyParentQueries(r),_t(r),r}function bt(e,t,n){var r=t?qe(t,t.def.lastRenderRootNode):e.renderElement;Je(n,2,n.renderer.parentNode(r),n.renderer.nextSibling(r),void 0)}function _t(e){Je(e,3,null,null,void 0)}function wt(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function xt(e,t){t>=e.length-1?e.pop():e.splice(t,1)}function Ct(e,t,n,r,i,o){return new Hl(e,t,n,r,i,o)}function Et(e){return e.viewDefFactory}function St(e,t,n){return new ql(e,t,n)}function Ot(e){return new Ul(e)}function Tt(e,t){return new Gl(e,t)}function kt(e,t){return new Kl(e,t)}function Dt(e,t){var n=e.def.nodes[t];if(1&n.flags){var r=Oe(e,n.nodeIndex);return n.element.template?r.template:r.renderElement}if(2&n.flags)return Se(e,n.nodeIndex).renderText;if(20240&n.flags)return Te(e,n.nodeIndex).instance;throw new Error("Illegal state: read nodeValue for node index "+t)}function It(e){return new $l(e.renderer)}function Rt(e,t,n,r){return new Zl(e,t,n,r)}function Mt(e,t,n,r,i,o,l,a){var s=[];if(l)for(var u in l){var c=l[u];s[c[0]]={flags:8,name:u,nonMinifiedName:c[1],ns:null,securityContext:null,suffix:null}}var d=[];if(a)for(var p in a)d.push({type:1,propName:p,target:null,eventName:a[p]});return t|=16384,At(e,t,n,r,i,i,o,s,d)}function Pt(e,t,n){return e|=16,At(-1,e,null,0,t,t,n)}function Nt(e,t,n,r,i){return At(-1,e,t,0,n,r,i)}function At(e,t,n,r,i,o,l,a,s){var u=Ze(n),c=u.matchedQueries,d=u.references,p=u.matchedQueryIds;s||(s=[]),a||(a=[]),o=f(o);var h=Qe(l);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:c,matchedQueryIds:p,references:d,ngContentIndex:-1,childCount:r,bindings:a,bindingFlags:ot(a),outputs:s,element:null,provider:{token:i,value:o,deps:h},text:null,query:null,ngContent:null}}function Lt(e,t){return Vt(e,t)}function Ft(e,t){for(var n=e;n.parent&&!Ge(n);)n=n.parent;return zt(n.parent,We(n),!0,t.provider.value,t.provider.deps)}function jt(e,t){var n=zt(e,t.parent,(32768&t.flags)>0,t.provider.value,t.provider.deps);if(t.outputs.length)for(var r=0;r<t.outputs.length;r++){var i=t.outputs[r],o=n[i.propName].subscribe(function(e,t,n){return function(r){return Be(e,t,n,r)}}(e,t.parent.nodeIndex,i.eventName));e.disposables[t.outputIndex+r]=o.unsubscribe.bind(o)}return n}function Vt(e,t){var n=(8192&t.flags)>0,r=t.provider;switch(201347067&t.flags){case 512:return zt(e,t.parent,n,r.value,r.deps);case 1024:return function(e,t,n,r,i){var o=i.length;switch(o){case 0:return r();case 1:return r(Bt(e,t,n,i[0]));case 2:return r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]));case 3:return r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]),Bt(e,t,n,i[2]));default:for(var l=Array(o),a=0;a<o;a++)l[a]=Bt(e,t,n,i[a]);return r.apply(void 0,l)}}(e,t.parent,n,r.value,r.deps);case 2048:return Bt(e,t.parent,n,r.deps[0]);case 256:return r.value}}function zt(e,t,n,r,i){var o=i.length;switch(o){case 0:return new r;case 1:return new r(Bt(e,t,n,i[0]));case 2:return new r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]));case 3:return new r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]),Bt(e,t,n,i[2]));default:for(var l=new Array(o),a=0;a<o;a++)l[a]=Bt(e,t,n,i[a]);return new(r.bind.apply(r,[void 0].concat(l)))}}function Bt(e,t,n,r,i){if(void 0===i&&(i=yi.THROW_IF_NOT_FOUND),8&r.flags)return r.token;var o=e;2&r.flags&&(i=null);var l=r.tokenKey;for(l===ta&&(n=!(!t||!t.element.componentView)),t&&1&r.flags&&(n=!1,t=t.parent);e;){if(t)switch(l){case Ql:return It(Ht(e,t,n));case Yl:return Ht(e,t,n).renderer;case Xl:return new Bo(Oe(e,t.nodeIndex).renderElement);case Jl:return Oe(e,t.nodeIndex).viewContainer;case ea:if(t.element.template)return Oe(e,t.nodeIndex).template;break;case ta:return Ot(Ht(e,t,n));case na:return kt(e,t);default:var a=(n?t.element.allProviders:t.element.publicProviders)[l];if(a){var s=Te(e,a.nodeIndex);return s||(s={instance:Vt(e,a)},e.nodes[a.nodeIndex]=s),s.instance}}n=Ge(e),t=We(e),e=e.parent}var u=o.root.injector.get(r.token,ra);return u!==ra||i===ra?u:o.root.ngModule.injector.get(r.token,i)}function Ht(e,t,n){var r;if(n)r=Oe(e,t.nodeIndex).componentView;else for(r=e;r.parent&&!Ge(r);)r=r.parent;return r}function Wt(e,t,n,r,i,o){if(32768&n.flags){var l=Oe(e,n.parent.nodeIndex).componentView;2&l.def.flags&&(l.state|=8)}if(t.instance[n.bindings[r].name]=i,524288&n.flags){o=o||{};var a=e.oldValues[n.bindingIndex+r];a instanceof nl&&(a=a.wrapped),o[n.bindings[r].nonMinifiedName]=new il(a,i,0!=(2&e.state))}return e.oldValues[n.bindingIndex+r]=i,o}function qt(e,t){if(e.def.nodeFlags&t)for(var n=e.def.nodes,r=0,i=0;i<n.length;i++){var o=n[i],l=o.parent;for(!l&&o.flags&t&&Ut(e,i,o.flags&t,r++),0==(o.childFlags&t)&&(i+=o.childCount);l&&1&l.flags&&i===l.nodeIndex+l.childCount;)l.directChildFlags&t&&(r=function(e,t,n,r){for(var i=t.nodeIndex+1;i<=t.nodeIndex+t.childCount;i++){var o=e.def.nodes[i];o.flags&n&&Ut(e,i,o.flags&n,r++),i+=o.childCount}return r}(e,l,t,r)),l=l.parent}}function Ut(e,t,n,r){var i=Te(e,t);if(i){var o=i.instance;o&&(kl.setCurrentNode(e,t),1048576&n&&Ee(e,512,r)&&o.ngAfterContentInit(),2097152&n&&o.ngAfterContentChecked(),4194304&n&&Ee(e,768,r)&&o.ngAfterViewInit(),8388608&n&&o.ngAfterViewChecked(),131072&n&&o.ngOnDestroy())}}function Gt(e,t,n){var r=[];for(var i in n)r.push({propName:i,bindingType:n[i]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:t,filterId:$e(t),bindings:r},ngContent:null}}function Kt(){return new qo}function $t(e){for(var t=e.def.nodeMatchedQueries;e.parent&&Ke(e);){var n=e.parentNodeDef;e=e.parent;for(var r=n.nodeIndex+n.childCount,i=0;i<=r;i++)67108864&(o=e.def.nodes[i]).flags&&536870912&o.flags&&(o.query.filterId&t)===o.query.filterId&&De(e,i).setDirty(),!(1&o.flags&&i+o.childCount<n.nodeIndex)&&67108864&o.childFlags&&536870912&o.childFlags||(i+=o.childCount)}if(134217728&e.def.nodeFlags)for(i=0;i<e.def.nodes.length;i++){var o;134217728&(o=e.def.nodes[i]).flags&&536870912&o.flags&&De(e,i).setDirty(),i+=o.childCount}}function Zt(e,t){var n=De(e,t.nodeIndex);if(n.dirty){var r,i=void 0;if(67108864&t.flags){var o=t.parent.parent;i=Qt(e,o.nodeIndex,o.nodeIndex+o.childCount,t.query,[]),r=Te(e,t.parent.nodeIndex).instance}else 134217728&t.flags&&(i=Qt(e,0,e.def.nodes.length-1,t.query,[]),r=e.component);n.reset(i);for(var l=t.query.bindings,a=!1,s=0;s<l.length;s++){var u=l[s],c=void 0;switch(u.bindingType){case 0:c=n.first;break;case 1:c=n,a=!0}r[u.propName]=c}a&&n.notifyOnChanges()}}function Qt(e,t,n,r,i){for(var o=t;o<=n;o++){var l=e.def.nodes[o],a=l.matchedQueries[r.id];if(null!=a&&i.push(Yt(e,l,a)),1&l.flags&&l.element.template&&(l.element.template.nodeMatchedQueries&r.filterId)===r.filterId){var s=Oe(e,o);if((l.childMatchedQueries&r.filterId)===r.filterId&&(Qt(e,o+1,o+l.childCount,r,i),o+=l.childCount),16777216&l.flags)for(var u=s.viewContainer._embeddedViews,c=0;c<u.length;c++){var d=u[c],p=He(d);p&&p===s&&Qt(d,0,d.def.nodes.length-1,r,i)}var f=s.template._projectedViews;if(f)for(c=0;c<f.length;c++){var h=f[c];Qt(h,0,h.def.nodes.length-1,r,i)}}(l.childMatchedQueries&r.filterId)!==r.filterId&&(o+=l.childCount)}return i}function Yt(e,t,n){if(null!=n)switch(n){case 1:return Oe(e,t.nodeIndex).renderElement;case 0:return new Bo(Oe(e,t.nodeIndex).renderElement);case 2:return Oe(e,t.nodeIndex).template;case 3:return Oe(e,t.nodeIndex).viewContainer;case 4:return Te(e,t.nodeIndex).instance}}function Xt(e,t){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:t}}}function Jt(e,t,n){var r=Ye(e,t,n);r&&tt(e,n.ngContent.index,1,r,null,void 0)}function en(e,t){return rn(128,e,new Array(t+1))}function tn(e,t){return rn(32,e,new Array(t))}function nn(e,t){for(var n=Object.keys(t),r=n.length,i=new Array(r),o=0;o<r;o++){var l=n[o];i[t[l]]=l}return rn(64,e,i)}function rn(e,t,n){for(var r=new Array(n.length),i=0;i<n.length;i++){var o=n[i];r[i]={flags:8,name:o,ns:null,nonMinifiedName:o,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:r,bindingFlags:ot(r),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function on(e,t,n){for(var r=new Array(n.length-1),i=1;i<n.length;i++)r[i-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[i]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:r,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}function ln(e,t,n){var r,i=e.renderer;r=i.createText(n.text.prefix);var o=Ye(e,t,n);return o&&i.appendChild(o,r),{renderText:r}}function an(e,t){return(null!=e?e.toString():"")+t.suffix}function sn(e,t,n,r){for(var i=0,o=0,l=0,a=0,s=0,u=null,c=null,d=!1,p=!1,f=null,h=0;h<t.length;h++){var m=t[h];if(m.nodeIndex=h,m.parent=u,m.bindingIndex=i,m.outputIndex=o,m.renderParent=c,l|=m.flags,s|=m.matchedQueryIds,m.element){var g=m.element;g.publicProviders=u?u.element.publicProviders:Object.create(null),g.allProviders=g.publicProviders,d=!1,p=!1,m.element.template&&(s|=m.element.template.nodeMatchedQueries)}if(function(e,t,n){var r=t.element&&t.element.template;if(r){if(!r.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(r.lastRenderRootNode&&16777216&r.lastRenderRootNode.flags)throw new Error("Illegal State: Last root node of a template can't have embedded views, at index "+t.nodeIndex+"!")}if(20224&t.flags&&0==(1&(e?e.flags:0)))throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index "+t.nodeIndex+"!");if(t.query){if(67108864&t.flags&&(!e||0==(16384&e.flags)))throw new Error("Illegal State: Content Query nodes need to be children of directives, at index "+t.nodeIndex+"!");if(134217728&t.flags&&e)throw new Error("Illegal State: View Query nodes have to be top level nodes, at index "+t.nodeIndex+"!")}if(t.childCount){var i=e?e.nodeIndex+e.childCount:n-1;if(t.nodeIndex<=i&&t.nodeIndex+t.childCount>i)throw new Error("Illegal State: childCount of node leads outside of parent, at index "+t.nodeIndex+"!")}}(u,m,t.length),i+=m.bindings.length,o+=m.outputs.length,!c&&3&m.flags&&(f=m),20224&m.flags){d||(d=!0,u.element.publicProviders=Object.create(u.element.publicProviders),u.element.allProviders=u.element.publicProviders);var y=0!=(32768&m.flags);0==(8192&m.flags)||y?u.element.publicProviders[Pe(m.provider.token)]=m:(p||(p=!0,u.element.allProviders=Object.create(u.element.publicProviders)),u.element.allProviders[Pe(m.provider.token)]=m),y&&(u.element.componentProvider=m)}if(u?(u.childFlags|=m.flags,u.directChildFlags|=m.flags,u.childMatchedQueries|=m.matchedQueryIds,m.element&&m.element.template&&(u.childMatchedQueries|=m.element.template.nodeMatchedQueries)):a|=m.flags,m.childCount>0)u=m,un(m)||(c=m);else for(;u&&h===u.nodeIndex+u.childCount;){var v=u.parent;v&&(v.childFlags|=u.childFlags,v.childMatchedQueries|=u.childMatchedQueries),c=(u=v)&&un(u)?u.renderParent:u}}return{factory:null,nodeFlags:l,rootNodeFlags:a,nodeMatchedQueries:s,flags:e,nodes:t,updateDirectives:n||Dl,updateRenderer:r||Dl,handleEvent:function(e,n,r,i){return t[n].element.handleEvent(e,r,i)},bindingCount:i,outputCount:o,lastRenderRootNode:f}}function un(e){return 0!=(1&e.flags)&&null===e.element.name}function cn(e,t,n,r){var i=fn(e.root,e.renderer,e,t,n);return hn(i,e.component,r),mn(i),i}function dn(e,t,n){var r=fn(e,e.renderer,null,null,t);return hn(r,n,n),mn(r),r}function pn(e,t,n,r){var i,o=t.element.componentRendererType;return i=o?e.root.rendererFactory.createRenderer(r,o):e.root.renderer,fn(e.root,i,e,t.element.componentProvider,n)}function fn(e,t,n,r,i){var o=new Array(i.nodes.length),l=i.outputCount?new Array(i.outputCount):null;return{def:i,parent:n,viewContainerParent:null,parentNodeDef:r,context:null,component:null,nodes:o,state:13,root:e,renderer:t,oldValues:new Array(i.bindingCount),disposables:l,initIndex:-1}}function hn(e,t,n){e.component=t,e.context=n}function mn(e){var t;Ge(e)&&(t=Oe(e.parent,e.parentNodeDef.parent.nodeIndex).renderElement);for(var n=e.def,r=e.nodes,i=0;i<n.nodes.length;i++){var o=n.nodes[i];kl.setCurrentNode(e,i);var l=void 0;switch(201347067&o.flags){case 1:var a=dt(e,t,o),s=void 0;if(33554432&o.flags){var u=Xe(o.element.componentView);s=kl.createComponentView(e,o,u,a)}pt(e,s,o,a),l={renderElement:a,componentView:s,viewContainer:null,template:o.element.template?Tt(e,o):void 0},16777216&o.flags&&(l.viewContainer=St(e,o,l));break;case 2:l=ln(e,t,o);break;case 512:case 1024:case 2048:case 256:(l=r[i])||4096&o.flags||(l={instance:Lt(e,o)});break;case 16:l={instance:Ft(e,o)};break;case 16384:(l=r[i])||(l={instance:jt(e,o)}),32768&o.flags&&hn(Oe(e,o.parent.nodeIndex).componentView,l.instance,l.instance);break;case 32:case 64:case 128:l={value:void 0};break;case 67108864:case 134217728:l=Kt();break;case 8:Jt(e,t,o),l=void 0}r[i]=l}Cn(e,ia.CreateViewNodes),Tn(e,201326592,268435456,0)}function gn(e){bn(e),kl.updateDirectives(e,1),En(e,ia.CheckNoChanges),kl.updateRenderer(e,1),Cn(e,ia.CheckNoChanges),e.state&=-97}function yn(e){1&e.state?(e.state&=-2,e.state|=2):e.state&=-3,Ce(e,0,256),bn(e),kl.updateDirectives(e,0),En(e,ia.CheckAndUpdate),Tn(e,67108864,536870912,0);var t=Ce(e,256,512);qt(e,2097152|(t?1048576:0)),kl.updateRenderer(e,0),Cn(e,ia.CheckAndUpdate),Tn(e,134217728,536870912,0),qt(e,8388608|((t=Ce(e,512,768))?4194304:0)),2&e.def.flags&&(e.state&=-9),e.state&=-97,Ce(e,768,1024)}function vn(e,t,n,r,i,o,l,a,s,u,c,d,p){return 0===n?function(e,t,n,r,i,o,l,a,s,u,c,d){switch(201347067&t.flags){case 1:return function(e,t,r,i,o,l,a,s,u,c,d,p){var f=t.bindings.length,h=!1;return f>0&&ft(e,t,0,n)&&(h=!0),f>1&&ft(e,t,1,i)&&(h=!0),f>2&&ft(e,t,2,o)&&(h=!0),f>3&&ft(e,t,3,l)&&(h=!0),f>4&&ft(e,t,4,a)&&(h=!0),f>5&&ft(e,t,5,s)&&(h=!0),f>6&&ft(e,t,6,u)&&(h=!0),f>7&&ft(e,t,7,c)&&(h=!0),f>8&&ft(e,t,8,d)&&(h=!0),f>9&&ft(e,t,9,p)&&(h=!0),h}(e,t,0,r,i,o,l,a,s,u,c,d);case 2:return function(e,t,n,r,i,o,l,a,s,u,c,d){var p=!1,f=t.bindings,h=f.length;if(h>0&&Fe(e,t,0,n)&&(p=!0),h>1&&Fe(e,t,1,r)&&(p=!0),h>2&&Fe(e,t,2,i)&&(p=!0),h>3&&Fe(e,t,3,o)&&(p=!0),h>4&&Fe(e,t,4,l)&&(p=!0),h>5&&Fe(e,t,5,a)&&(p=!0),h>6&&Fe(e,t,6,s)&&(p=!0),h>7&&Fe(e,t,7,u)&&(p=!0),h>8&&Fe(e,t,8,c)&&(p=!0),h>9&&Fe(e,t,9,d)&&(p=!0),p){var m=t.text.prefix;h>0&&(m+=an(n,f[0])),h>1&&(m+=an(r,f[1])),h>2&&(m+=an(i,f[2])),h>3&&(m+=an(o,f[3])),h>4&&(m+=an(l,f[4])),h>5&&(m+=an(a,f[5])),h>6&&(m+=an(s,f[6])),h>7&&(m+=an(u,f[7])),h>8&&(m+=an(c,f[8])),h>9&&(m+=an(d,f[9]));var g=Se(e,t.nodeIndex).renderText;e.renderer.setValue(g,m)}return p}(e,t,n,r,i,o,l,a,s,u,c,d);case 16384:return function(e,t,n,r,i,o,l,a,s,u,c,d){var p=Te(e,t.nodeIndex),f=p.instance,h=!1,m=void 0,g=t.bindings.length;return g>0&&Le(e,t,0,n)&&(h=!0,m=Wt(e,p,t,0,n,m)),g>1&&Le(e,t,1,r)&&(h=!0,m=Wt(e,p,t,1,r,m)),g>2&&Le(e,t,2,i)&&(h=!0,m=Wt(e,p,t,2,i,m)),g>3&&Le(e,t,3,o)&&(h=!0,m=Wt(e,p,t,3,o,m)),g>4&&Le(e,t,4,l)&&(h=!0,m=Wt(e,p,t,4,l,m)),g>5&&Le(e,t,5,a)&&(h=!0,m=Wt(e,p,t,5,a,m)),g>6&&Le(e,t,6,s)&&(h=!0,m=Wt(e,p,t,6,s,m)),g>7&&Le(e,t,7,u)&&(h=!0,m=Wt(e,p,t,7,u,m)),g>8&&Le(e,t,8,c)&&(h=!0,m=Wt(e,p,t,8,c,m)),g>9&&Le(e,t,9,d)&&(h=!0,m=Wt(e,p,t,9,d,m)),m&&f.ngOnChanges(m),65536&t.flags&&Ee(e,256,t.nodeIndex)&&f.ngOnInit(),262144&t.flags&&f.ngDoCheck(),h}(e,t,n,r,i,o,l,a,s,u,c,d);case 32:case 64:case 128:return function(e,t,n,r,i,o,l,a,s,u,c,d){var p=t.bindings,f=!1,h=p.length;if(h>0&&Fe(e,t,0,n)&&(f=!0),h>1&&Fe(e,t,1,r)&&(f=!0),h>2&&Fe(e,t,2,i)&&(f=!0),h>3&&Fe(e,t,3,o)&&(f=!0),h>4&&Fe(e,t,4,l)&&(f=!0),h>5&&Fe(e,t,5,a)&&(f=!0),h>6&&Fe(e,t,6,s)&&(f=!0),h>7&&Fe(e,t,7,u)&&(f=!0),h>8&&Fe(e,t,8,c)&&(f=!0),h>9&&Fe(e,t,9,d)&&(f=!0),f){var m=ke(e,t.nodeIndex),g=void 0;switch(201347067&t.flags){case 32:g=new Array(p.length),h>0&&(g[0]=n),h>1&&(g[1]=r),h>2&&(g[2]=i),h>3&&(g[3]=o),h>4&&(g[4]=l),h>5&&(g[5]=a),h>6&&(g[6]=s),h>7&&(g[7]=u),h>8&&(g[8]=c),h>9&&(g[9]=d);break;case 64:g={},h>0&&(g[p[0].name]=n),h>1&&(g[p[1].name]=r),h>2&&(g[p[2].name]=i),h>3&&(g[p[3].name]=o),h>4&&(g[p[4].name]=l),h>5&&(g[p[5].name]=a),h>6&&(g[p[6].name]=s),h>7&&(g[p[7].name]=u),h>8&&(g[p[8].name]=c),h>9&&(g[p[9].name]=d);break;case 128:var y=n;switch(h){case 1:g=y.transform(n);break;case 2:g=y.transform(r);break;case 3:g=y.transform(r,i);break;case 4:g=y.transform(r,i,o);break;case 5:g=y.transform(r,i,o,l);break;case 6:g=y.transform(r,i,o,l,a);break;case 7:g=y.transform(r,i,o,l,a,s);break;case 8:g=y.transform(r,i,o,l,a,s,u);break;case 9:g=y.transform(r,i,o,l,a,s,u,c);break;case 10:g=y.transform(r,i,o,l,a,s,u,c,d)}}m.value=g}return f}(e,t,n,r,i,o,l,a,s,u,c,d);default:throw"unreachable"}}(e,t,r,i,o,l,a,s,u,c,d,p):function(e,t,n){switch(201347067&t.flags){case 1:return function(e,t,n){for(var r=!1,i=0;i<n.length;i++)ft(e,t,i,n[i])&&(r=!0);return r}(e,t,n);case 2:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Fe(e,t,o,n[o])&&(i=!0);if(i){var l="";for(o=0;o<n.length;o++)l+=an(n[o],r[o]);l=t.text.prefix+l;var a=Se(e,t.nodeIndex).renderText;e.renderer.setValue(a,l)}return i}(e,t,n);case 16384:return function(e,t,n){for(var r=Te(e,t.nodeIndex),i=r.instance,o=!1,l=void 0,a=0;a<n.length;a++)Le(e,t,a,n[a])&&(o=!0,l=Wt(e,r,t,a,n[a],l));return l&&i.ngOnChanges(l),65536&t.flags&&Ee(e,256,t.nodeIndex)&&i.ngOnInit(),262144&t.flags&&i.ngDoCheck(),o}(e,t,n);case 32:case 64:case 128:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Fe(e,t,o,n[o])&&(i=!0);if(i){var l=ke(e,t.nodeIndex),a=void 0;switch(201347067&t.flags){case 32:a=n;break;case 64:for(a={},o=0;o<n.length;o++)a[r[o].name]=n[o];break;case 128:var s=n[0],u=n.slice(1);a=s.transform.apply(s,u)}l.value=a}return i}(e,t,n);default:throw"unreachable"}}(e,t,r)}function bn(e){var t=e.def;if(4&t.nodeFlags)for(var n=0;n<t.nodes.length;n++){var r=t.nodes[n];if(4&r.flags){var i=Oe(e,n).template._projectedViews;if(i)for(var o=0;o<i.length;o++){var l=i[o];l.state|=32,ze(l,e)}}else 0==(4&r.childFlags)&&(n+=r.childCount)}}function _n(e,t,n,r,i,o,l,a,s,u,c,d,p){return 0===n?function(e,t,n,i,o,l,a,s,u,c,d,p){var f=t.bindings.length;f>0&&je(e,t,0,r),f>1&&je(e,t,1,i),f>2&&je(e,t,2,o),f>3&&je(e,t,3,l),f>4&&je(e,t,4,a),f>5&&je(e,t,5,s),f>6&&je(e,t,6,u),f>7&&je(e,t,7,c),f>8&&je(e,t,8,d),f>9&&je(e,t,9,p)}(e,t,0,i,o,l,a,s,u,c,d,p):function(e,t,n){for(var r=0;r<n.length;r++)je(e,t,r,n[r])}(e,t,r),!1}function wn(e,t){if(De(e,t.nodeIndex).dirty)throw Ie(kl.createDebugContext(e,t.nodeIndex),"Query "+t.query.id+" not dirty","Query "+t.query.id+" dirty",0!=(1&e.state))}function xn(e){if(!(128&e.state)){if(En(e,ia.Destroy),Cn(e,ia.Destroy),qt(e,131072),e.disposables)for(var t=0;t<e.disposables.length;t++)e.disposables[t]();!function(e){if(16&e.state){var t=He(e);if(t){var n=t.template._projectedViews;n&&(xt(n,n.indexOf(e)),kl.dirtyParentQueries(e))}}}(e),e.renderer.destroyNode&&function(e){for(var t=e.def.nodes.length,n=0;n<t;n++){var r=e.def.nodes[n];1&r.flags?e.renderer.destroyNode(Oe(e,n).renderElement):2&r.flags?e.renderer.destroyNode(Se(e,n).renderText):(67108864&r.flags||134217728&r.flags)&&De(e,n).destroy()}}(e),Ge(e)&&e.renderer.destroy(),e.state|=128}}function Cn(e,t){var n=e.def;if(33554432&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];33554432&i.flags?Sn(Oe(e,r).componentView,t):0==(33554432&i.childFlags)&&(r+=i.childCount)}}function En(e,t){var n=e.def;if(16777216&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];if(16777216&i.flags)for(var o=Oe(e,r).viewContainer._embeddedViews,l=0;l<o.length;l++)Sn(o[l],t);else 0==(16777216&i.childFlags)&&(r+=i.childCount)}}function Sn(e,t){var n=e.state;switch(t){case ia.CheckNoChanges:0==(128&n)&&(12==(12&n)?gn(e):64&n&&On(e,ia.CheckNoChangesProjectedViews));break;case ia.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?gn(e):64&n&&On(e,t));break;case ia.CheckAndUpdate:0==(128&n)&&(12==(12&n)?yn(e):64&n&&On(e,ia.CheckAndUpdateProjectedViews));break;case ia.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?yn(e):64&n&&On(e,t));break;case ia.Destroy:xn(e);break;case ia.CreateViewNodes:mn(e)}}function On(e,t){En(e,t),Cn(e,t)}function Tn(e,t,n,r){if(e.def.nodeFlags&t&&e.def.nodeFlags&n)for(var i=e.def.nodes.length,o=0;o<i;o++){var l=e.def.nodes[o];if(l.flags&t&&l.flags&n)switch(kl.setCurrentNode(e,l.nodeIndex),r){case 0:Zt(e,l);break;case 1:wn(e,l)}l.childFlags&t&&l.childFlags&n||(o+=l.childCount)}}function kn(){if(!oa){oa=!0;var e=J()?{setCurrentNode:qn,createRootView:In,createEmbeddedView:Mn,createComponentView:Pn,createNgModuleRef:Nn,overrideProvider:An,overrideComponentView:Ln,clearOverrides:Fn,checkAndUpdateView:Bn,checkNoChangesView:Hn,destroyView:Wn,createDebugContext:function(e,t){return new ca(e,t)},handleEvent:Un,updateDirectives:Gn,updateRenderer:Kn}:{setCurrentNode:function(){},createRootView:Dn,createEmbeddedView:cn,createComponentView:pn,createNgModuleRef:Rt,overrideProvider:Dl,overrideComponentView:Dl,clearOverrides:Dl,checkAndUpdateView:yn,checkNoChangesView:gn,destroyView:xn,createDebugContext:function(e,t){return new ca(e,t)},handleEvent:function(e,t,n,r){return e.def.handleEvent(e,t,n,r)},updateDirectives:function(e,t){return e.def.updateDirectives(0===t?Vn:zn,e)},updateRenderer:function(e,t){return e.def.updateRenderer(0===t?Vn:zn,e)}};kl.setCurrentNode=e.setCurrentNode,kl.createRootView=e.createRootView,kl.createEmbeddedView=e.createEmbeddedView,kl.createComponentView=e.createComponentView,kl.createNgModuleRef=e.createNgModuleRef,kl.overrideProvider=e.overrideProvider,kl.overrideComponentView=e.overrideComponentView,kl.clearOverrides=e.clearOverrides,kl.checkAndUpdateView=e.checkAndUpdateView,kl.checkNoChangesView=e.checkNoChangesView,kl.destroyView=e.destroyView,kl.resolveDep=Bt,kl.createDebugContext=e.createDebugContext,kl.handleEvent=e.handleEvent,kl.updateDirectives=e.updateDirectives,kl.updateRenderer=e.updateRenderer,kl.dirtyParentQueries=$t}}function Dn(e,t,n,r,i,o){return dn(Rn(e,i,i.injector.get(jo),t,n),r,o)}function In(e,t,n,r,i,o){var l=i.injector.get(jo),a=Rn(e,i,new da(l),t,n),s=jn(r);return Jn(sa.create,dn,null,[a,s,o])}function Rn(e,t,n,r,i){var o=t.injector.get(Ol),l=t.injector.get(Pi);return{ngModule:t,injector:e,projectableNodes:r,selectorOrNode:i,sanitizer:o,rendererFactory:n,renderer:n.createRenderer(null,null),errorHandler:l}}function Mn(e,t,n,r){var i=jn(n);return Jn(sa.create,cn,null,[e,t,i,r])}function Pn(e,t,n,r){return n=aa.get(t.element.componentProvider.provider.token)||jn(n),Jn(sa.create,pn,null,[e,t,n,r])}function Nn(e,t,n,r){return Rt(e,t,n,function(e){var t=function(t){var n=!1,r=!1;return 0===la.size?{hasOverrides:n,hasDeprecatedOverrides:r}:(e.providers.forEach(function(e){var t=la.get(e.token);3840&e.flags&&t&&(n=!0,r=r||t.deprecatedBehavior)}),{hasOverrides:n,hasDeprecatedOverrides:r})}(),n=t.hasDeprecatedOverrides;return t.hasOverrides?(e=e.factory(function(){return Dl}),function(e){for(var t=0;t<e.providers.length;t++){var r=e.providers[t];n&&(r.flags|=4096);var i=la.get(r.token);i&&(r.flags=-3841&r.flags|i.flags,r.deps=Qe(i.deps),r.value=i.value)}}(e),e):e}(r))}function An(e){la.set(e.token,e)}function Ln(e,t){var n=Xe(Xe(Et(t)).nodes[0].element.componentView);aa.set(e,n)}function Fn(){la.clear(),aa.clear()}function jn(e){if(0===la.size)return e;var t=function(e){for(var t=[],n=null,r=0;r<e.nodes.length;r++){var i=e.nodes[r];1&i.flags&&(n=i),n&&3840&i.flags&&la.has(i.provider.token)&&(t.push(n.nodeIndex),n=null)}return t}(e);if(0===t.length)return e;e=e.factory(function(){return Dl});for(var n=0;n<t.length;n++)!function(e,r){for(var i=t[n]+1;i<e.nodes.length;i++){var o=e.nodes[i];if(1&o.flags)return;if(3840&o.flags){var l=o.provider,a=la.get(l.token);a&&(o.flags=-3841&o.flags|a.flags,l.deps=Qe(a.deps),l.value=a.value)}}}(e);return e}function Vn(e,t,n,r,i,o,l,a,s,u,c,d,p){var f=e.def.nodes[t];return vn(e,f,n,r,i,o,l,a,s,u,c,d,p),224&f.flags?ke(e,t).value:void 0}function zn(e,t,n,r,i,o,l,a,s,u,c,d,p){var f=e.def.nodes[t];return _n(e,f,n,r,i,o,l,a,s,u,c,d,p),224&f.flags?ke(e,t).value:void 0}function Bn(e){return Jn(sa.detectChanges,yn,null,[e])}function Hn(e){return Jn(sa.checkNoChanges,gn,null,[e])}function Wn(e){return Jn(sa.destroy,xn,null,[e])}function qn(e,t){Sr=e,Or=t}function Un(e,t,n,r){return qn(e,t),Jn(sa.handleEvent,e.def.handleEvent,null,[e,t,n,r])}function Gn(e,t){if(128&e.state)throw Me(sa[Er]);return qn(e,Qn(e,0)),e.def.updateDirectives(function(e,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var l=e.def.nodes[n];return 0===t?$n(e,l,r,i):Zn(e,l,r,i),16384&l.flags&&qn(e,Qn(e,n)),224&l.flags?ke(e,l.nodeIndex).value:void 0},e)}function Kn(e,t){if(128&e.state)throw Me(sa[Er]);return qn(e,Yn(e,0)),e.def.updateRenderer(function(e,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var l=e.def.nodes[n];return 0===t?$n(e,l,r,i):Zn(e,l,r,i),3&l.flags&&qn(e,Yn(e,n)),224&l.flags?ke(e,l.nodeIndex).value:void 0},e)}function $n(e,t,n,r){if(vn.apply(void 0,[e,t,n].concat(r))){var i=1===n?r[0]:r;if(16384&t.flags){for(var o={},l=0;l<t.bindings.length;l++){var a=t.bindings[l],s=i[l];8&a.flags&&(o[function(e){return"ng-reflect-"+(e=e.replace(/[$@]/g,"_").replace(ua,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return"-"+e[1].toLowerCase()}))}(a.nonMinifiedName)]=function(e){try{return null!=e?e.toString().slice(0,30):e}catch(e){return"[ERROR] Exception while trying to serialize the value"}}(s))}var u=t.parent,c=Oe(e,u.nodeIndex).renderElement;if(u.element.name)for(var d in o)null!=(s=o[d])?e.renderer.setAttribute(c,d,s):e.renderer.removeAttribute(c,d);else e.renderer.setValue(c,"bindings="+JSON.stringify(o,null,2))}}}function Zn(e,t,n,r){_n.apply(void 0,[e,t,n].concat(r))}function Qn(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(16384&r.flags&&r.bindings&&r.bindings.length)return n}return null}function Yn(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(3&r.flags&&r.bindings&&r.bindings.length)return n}return null}function Xn(e,t,n){for(var r in t.references)n[r]=Yt(e,t,t.references[r])}function Jn(e,t,n,r){var i=Er,o=Sr,l=Or;try{Er=e;var a=t.apply(n,r);return Sr=o,Or=l,Er=i,a}catch(e){if(b(e)||!Sr)throw e;throw function(e,t){return e instanceof Error||(e=new Error(e.toString())),Re(e,t),e}(e,er())}}function er(){return Sr?new ca(Sr,Or):null}function tr(e){return kn(),kl.overrideProvider(e)}function nr(e,t){return kn(),kl.overrideComponentView(e,t)}function rr(){return kn(),kl.clearOverrides()}function ir(e,t,n){return new fa(e,t,n)}function or(e,t){return{type:7,name:e,definitions:t,options:{}}}function lr(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}}function ar(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}}function sr(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}}function ur(e){return{type:6,styles:e,offset:null}}function cr(e,t,n){return{type:0,name:e,styles:t,options:n}}function dr(e){return{type:5,steps:e}}function pr(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}}function fr(e,t){return or(e,t)}function hr(e,t){return lr(e,t)}function mr(e){return ar(e)}function gr(e){return sr(e)}function yr(e){return ur(e)}function vr(e,t){return cr(e,t)}function br(e){return dr(e)}function _r(e,t){return pr(e,t)}n.d(t,"createPlatform",function(){return ee}),n.d(t,"assertPlatform",function(){return ne}),n.d(t,"destroyPlatform",function(){return re}),n.d(t,"getPlatform",function(){return ie}),n.d(t,"PlatformRef",function(){return Mo}),n.d(t,"ApplicationRef",function(){return Po}),n.d(t,"enableProdMode",function(){return X}),n.d(t,"isDevMode",function(){return J}),n.d(t,"createPlatformFactory",function(){return te}),n.d(t,"NgProbeToken",function(){return Ro}),n.d(t,"APP_ID",function(){return Zi}),n.d(t,"PACKAGE_ROOT_URL",function(){return eo}),n.d(t,"PLATFORM_INITIALIZER",function(){return Yi}),n.d(t,"PLATFORM_ID",function(){return Xi}),n.d(t,"APP_BOOTSTRAP_LISTENER",function(){return Ji}),n.d(t,"APP_INITIALIZER",function(){return Ki}),n.d(t,"ApplicationInitStatus",function(){return $i}),n.d(t,"DebugElement",function(){return el}),n.d(t,"DebugNode",function(){return Jo}),n.d(t,"asNativeElements",function(){return de}),n.d(t,"getDebugNode",function(){return he}),n.d(t,"Testability",function(){return So}),n.d(t,"TestabilityRegistry",function(){return Oo}),n.d(t,"setTestabilityGetter",function(){return Y}),n.d(t,"TRANSLATIONS",function(){return wl}),n.d(t,"TRANSLATIONS_FORMAT",function(){return xl}),n.d(t,"LOCALE_ID",function(){return _l}),n.d(t,"MissingTranslationStrategy",function(){return Cl}),n.d(t,"ApplicationModule",function(){return El}),n.d(t,"wtfCreateScope",function(){return yo}),n.d(t,"wtfLeave",function(){return vo}),n.d(t,"wtfStartTimeRange",function(){return bo}),n.d(t,"wtfEndTimeRange",function(){return _o}),n.d(t,"Type",function(){return Li}),n.d(t,"EventEmitter",function(){return wo}),n.d(t,"ErrorHandler",function(){return Pi}),n.d(t,"Sanitizer",function(){return Ol}),n.d(t,"SecurityContext",function(){return Sl}),n.d(t,"ANALYZE_FOR_ENTRY_COMPONENTS",function(){return Lr}),n.d(t,"Attribute",function(){return Fr}),n.d(t,"ContentChild",function(){return zr}),n.d(t,"ContentChildren",function(){return Vr}),n.d(t,"Query",function(){return jr}),n.d(t,"ViewChild",function(){return Hr}),n.d(t,"ViewChildren",function(){return Br}),n.d(t,"Component",function(){return Gr}),n.d(t,"Directive",function(){return Ur}),n.d(t,"HostBinding",function(){return Qr}),n.d(t,"HostListener",function(){return Yr}),n.d(t,"Input",function(){return $r}),n.d(t,"Output",function(){return Zr}),n.d(t,"Pipe",function(){return Kr}),n.d(t,"CUSTOM_ELEMENTS_SCHEMA",function(){return Xr}),n.d(t,"NO_ERRORS_SCHEMA",function(){return Jr}),n.d(t,"NgModule",function(){return ei}),n.d(t,"ViewEncapsulation",function(){return ti}),n.d(t,"Version",function(){return ni}),n.d(t,"VERSION",function(){return ri}),n.d(t,"forwardRef",function(){return p}),n.d(t,"resolveForwardRef",function(){return f}),n.d(t,"Injector",function(){return yi}),n.d(t,"ReflectiveInjector",function(){return Ui}),n.d(t,"ResolvedReflectiveFactory",function(){return Wi}),n.d(t,"ReflectiveKey",function(){return Ni}),n.d(t,"InjectionToken",function(){return Mr}),n.d(t,"Inject",function(){return ii}),n.d(t,"Optional",function(){return oi}),n.d(t,"Injectable",function(){return li}),n.d(t,"Self",function(){return ai}),n.d(t,"SkipSelf",function(){return si}),n.d(t,"Host",function(){return ui}),n.d(t,"NgZone",function(){return xo}),n.d(t,"RenderComponentType",function(){return No}),n.d(t,"Renderer",function(){return Lo}),n.d(t,"Renderer2",function(){return zo}),n.d(t,"RendererFactory2",function(){return jo}),n.d(t,"RendererStyleFlags2",function(){return Vo}),n.d(t,"RootRenderer",function(){return Fo}),n.d(t,"COMPILER_OPTIONS",function(){return io}),n.d(t,"Compiler",function(){return ro}),n.d(t,"CompilerFactory",function(){return oo}),n.d(t,"ModuleWithComponentFactories",function(){return no}),n.d(t,"ComponentFactory",function(){return ao}),n.d(t,"ComponentRef",function(){return lo}),n.d(t,"ComponentFactoryResolver",function(){return co}),n.d(t,"ElementRef",function(){return Bo}),n.d(t,"NgModuleFactory",function(){return mo}),n.d(t,"NgModuleRef",function(){return ho}),n.d(t,"NgModuleFactoryLoader",function(){return Ho}),n.d(t,"getModuleFactory",function(){return se}),n.d(t,"QueryList",function(){return qo}),n.d(t,"SystemJsNgModuleLoader",function(){return Ko}),n.d(t,"SystemJsNgModuleLoaderConfig",function(){return Uo}),n.d(t,"TemplateRef",function(){return $o}),n.d(t,"ViewContainerRef",function(){return Zo}),n.d(t,"EmbeddedViewRef",function(){return Xo}),n.d(t,"ViewRef",function(){return Yo}),n.d(t,"ChangeDetectionStrategy",function(){return Wr}),n.d(t,"ChangeDetectorRef",function(){return Qo}),n.d(t,"DefaultIterableDiffer",function(){return al}),n.d(t,"IterableDiffers",function(){return hl}),n.d(t,"KeyValueDiffers",function(){return ml}),n.d(t,"SimpleChange",function(){return il}),n.d(t,"WrappedValue",function(){return nl}),n.d(t,"platformCore",function(){return bl}),n.d(t,"\u0275ALLOW_MULTIPLE_PLATFORMS",function(){return Io}),n.d(t,"\u0275APP_ID_RANDOM_PROVIDER",function(){return Qi}),n.d(t,"\u0275ValueUnwrapper",function(){return rl}),n.d(t,"\u0275devModeEqual",function(){return ge}),n.d(t,"\u0275isListLikeIterable",function(){return ye}),n.d(t,"\u0275ChangeDetectorStatus",function(){return qr}),n.d(t,"\u0275isDefaultChangeDetectionStrategy",function(){return a}),n.d(t,"\u0275Console",function(){return to}),n.d(t,"\u0275ComponentFactory",function(){return ao}),n.d(t,"\u0275CodegenComponentFactoryResolver",function(){return po}),n.d(t,"\u0275ReflectionCapabilities",function(){return ji}),n.d(t,"\u0275RenderDebugInfo",function(){return Ao}),n.d(t,"\u0275global",function(){return pi}),n.d(t,"\u0275looseIdentical",function(){return c}),n.d(t,"\u0275stringify",function(){return d}),n.d(t,"\u0275makeDecorator",function(){return r}),n.d(t,"\u0275isObservable",function(){return L}),n.d(t,"\u0275isPromise",function(){return A}),n.d(t,"\u0275clearOverrides",function(){return rr}),n.d(t,"\u0275overrideComponentView",function(){return nr}),n.d(t,"\u0275overrideProvider",function(){return tr}),n.d(t,"\u0275NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR",function(){return ra}),n.d(t,"\u0275registerModuleFactory",function(){return ae}),n.d(t,"\u0275EMPTY_ARRAY",function(){return Ll}),n.d(t,"\u0275EMPTY_MAP",function(){return Fl}),n.d(t,"\u0275and",function(){return ut}),n.d(t,"\u0275ccf",function(){return Ct}),n.d(t,"\u0275cmf",function(){return ir}),n.d(t,"\u0275crt",function(){return Ae}),n.d(t,"\u0275did",function(){return Mt}),n.d(t,"\u0275eld",function(){return ct}),n.d(t,"\u0275elementEventFullName",function(){return Ue}),n.d(t,"\u0275getComponentViewDefinitionFactory",function(){return Et}),n.d(t,"\u0275inlineInterpolate",function(){return at}),n.d(t,"\u0275interpolate",function(){return lt}),n.d(t,"\u0275mod",function(){return mt}),n.d(t,"\u0275mpd",function(){return ht}),n.d(t,"\u0275ncd",function(){return Xt}),n.d(t,"\u0275nov",function(){return Dt}),n.d(t,"\u0275pid",function(){return Pt}),n.d(t,"\u0275prd",function(){return Nt}),n.d(t,"\u0275pad",function(){return tn}),n.d(t,"\u0275pod",function(){return nn}),n.d(t,"\u0275ppd",function(){return en}),n.d(t,"\u0275qud",function(){return Gt}),n.d(t,"\u0275ted",function(){return on}),n.d(t,"\u0275unv",function(){return Ne}),n.d(t,"\u0275vid",function(){return sn}),n.d(t,"AUTO_STYLE",function(){return ha}),n.d(t,"trigger",function(){return fr}),n.d(t,"animate",function(){return hr}),n.d(t,"group",function(){return mr}),n.d(t,"sequence",function(){return gr}),n.d(t,"style",function(){return yr}),n.d(t,"state",function(){return vr}),n.d(t,"keyframes",function(){return br}),n.d(t,"transition",function(){return _r}),n.d(t,"\u0275x",function(){return lr}),n.d(t,"\u0275y",function(){return ar}),n.d(t,"\u0275bc",function(){return dr}),n.d(t,"\u0275z",function(){return sr}),n.d(t,"\u0275bb",function(){return cr}),n.d(t,"\u0275ba",function(){return ur}),n.d(t,"\u0275bd",function(){return pr}),n.d(t,"\u0275w",function(){return or}),n.d(t,"\u0275k",function(){return _e}),n.d(t,"\u0275l",function(){return we}),n.d(t,"\u0275m",function(){return xe}),n.d(t,"\u0275f",function(){return F}),n.d(t,"\u0275g",function(){return yl}),n.d(t,"\u0275h",function(){return vl}),n.d(t,"\u0275i",function(){return ol}),n.d(t,"\u0275j",function(){return dl}),n.d(t,"\u0275b",function(){return Di}),n.d(t,"\u0275c",function(){return Gi}),n.d(t,"\u0275d",function(){return zi}),n.d(t,"\u0275e",function(){return I}),n.d(t,"\u0275n",function(){return go}),n.d(t,"\u0275p",function(){return H}),n.d(t,"\u0275o",function(){return B}),n.d(t,"\u0275s",function(){return U}),n.d(t,"\u0275q",function(){return W}),n.d(t,"\u0275r",function(){return q}),n.d(t,"\u0275a",function(){return o}),n.d(t,"\u0275t",function(){return At}),n.d(t,"\u0275u",function(){return Tl});var wr,xr,Cr,Er,Sr,Or,Tr=n("6Xbx"),kr=n("AP4T"),Dr=n("2kLc"),Ir=n("URbD"),Rr=n("TO51"),Mr=function(){function e(e){this._desc=e,this.ngMetadataName="InjectionToken"}return e.prototype.toString=function(){return"InjectionToken "+this._desc},e}(),Pr="__annotations__",Nr="__paramaters__",Ar="__prop__metadata__",Lr=new Mr("AnalyzeForEntryComponents"),Fr=o("Attribute",function(e){return{attributeName:e}}),jr=function(){},Vr=l("ContentChildren",function(e,t){return void 0===t&&(t={}),Object(Tr.__assign)({selector:e,first:!1,isViewQuery:!1,descendants:!1},t)},jr),zr=l("ContentChild",function(e,t){return void 0===t&&(t={}),Object(Tr.__assign)({selector:e,first:!0,isViewQuery:!1,descendants:!0},t)},jr),Br=l("ViewChildren",function(e,t){return void 0===t&&(t={}),Object(Tr.__assign)({selector:e,first:!1,isViewQuery:!0,descendants:!0},t)},jr),Hr=l("ViewChild",function(e,t){return Object(Tr.__assign)({selector:e,first:!0,isViewQuery:!0,descendants:!0},t)},jr),Wr=function(){var e={OnPush:0,Default:1};return e[e.OnPush]="OnPush",e[e.Default]="Default",e}(),qr=function(){var e={CheckOnce:0,Checked:1,CheckAlways:2,Detached:3,Errored:4,Destroyed:5};return e[e.CheckOnce]="CheckOnce",e[e.Checked]="Checked",e[e.CheckAlways]="CheckAlways",e[e.Detached]="Detached",e[e.Errored]="Errored",e[e.Destroyed]="Destroyed",e}(),Ur=r("Directive",function(e){return void 0===e&&(e={}),e}),Gr=r("Component",function(e){return void 0===e&&(e={}),Object(Tr.__assign)({changeDetection:Wr.Default},e)},Ur),Kr=r("Pipe",function(e){return Object(Tr.__assign)({pure:!0},e)}),$r=l("Input",function(e){return{bindingPropertyName:e}}),Zr=l("Output",function(e){return{bindingPropertyName:e}}),Qr=l("HostBinding",function(e){return{hostPropertyName:e}}),Yr=l("HostListener",function(e,t){return{eventName:e,args:t}}),Xr={name:"custom-elements"},Jr={name:"no-errors-schema"},ei=r("NgModule",function(e){return e}),ti=function(){var e={Emulated:0,Native:1,None:2};return e[e.Emulated]="Emulated",e[e.Native]="Native",e[e.None]="None",e}(),ni=function(e){this.full=e,this.major=e.split(".")[0],this.minor=e.split(".")[1],this.patch=e.split(".").slice(2).join(".")},ri=new ni("5.1.1"),ii=o("Inject",function(e){return{token:e}}),oi=o("Optional"),li=r("Injectable"),ai=o("Self"),si=o("SkipSelf"),ui=o("Host"),ci="undefined"!=typeof window&&window,di="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,pi=ci||void 0!==e&&e||di,fi=null,hi=new Object,mi=hi,gi=function(){function e(){}return e.prototype.get=function(e,t){if(void 0===t&&(t=hi),t===hi)throw new Error("NullInjectorError: No provider for "+d(e)+"!");return t},e}(),yi=function(){function e(){}return e.create=function(e,t){return new Di(e,t)},e.THROW_IF_NOT_FOUND=hi,e.NULL=new gi,e}(),vi=function(e){return e},bi=[],_i=vi,wi=function(){return Array.prototype.slice.call(arguments)},xi={},Ci=xi,Ei=function(e){for(var t in e)if(e[t]===xi)return t;throw Error("!prop")}({provide:String,useValue:Ci}),Si="ngTempTokenPath",Oi=yi.NULL,Ti=/\n/gm,ki="\u0275",Di=function(){function e(e,t){void 0===t&&(t=Oi),this.parent=t;var n=this._records=new Map;n.set(yi,{token:yi,fn:vi,deps:bi,value:this,useNew:!1}),m(n,e)}return e.prototype.get=function(e,t){var n=this._records.get(e);try{return g(e,n,this._records,this.parent,t)}catch(e){var r=e[Si];throw e.message=y("\n"+e.message,r),e.ngTokenPath=r,e[Si]=null,e}},e.prototype.toString=function(){var e=[];return this._records.forEach(function(t,n){return e.push(d(n))}),"StaticInjector["+e.join(", ")+"]"},e}(),Ii="ngDebugContext",Ri="ngOriginalError",Mi="ngErrorLogger",Pi=function(){function e(){this._console=console}return e.prototype.handleError=function(e){var t=this._findOriginalError(e),n=this._findContext(e),r=e[Mi]||function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e.error.apply(e,t)};r(this._console,"ERROR",e),t&&r(this._console,"ORIGINAL ERROR",t),n&&r(this._console,"ERROR CONTEXT",n)},e.prototype._findContext=function(e){return e?b(e)?b(e):this._findContext(_(e)):null},e.prototype._findOriginalError=function(e){for(var t=_(e);t&&_(t);)t=_(t);return t},e}(),Ni=function(){function e(e,t){if(this.token=e,this.id=t,!e)throw new Error("Token must be defined!");this.displayName=d(this.token)}return e.get=function(e){return Ai.get(f(e))},Object.defineProperty(e,"numberOfKeys",{get:function(){return Ai.numberOfKeys},enumerable:!0,configurable:!0}),e}(),Ai=new(function(){function e(){this._allKeys=new Map}return e.prototype.get=function(e){if(e instanceof Ni)return e;if(this._allKeys.has(e))return this._allKeys.get(e);var t=new Ni(e,Ni.numberOfKeys);return this._allKeys.set(e,t),t},Object.defineProperty(e.prototype,"numberOfKeys",{get:function(){return this._allKeys.size},enumerable:!0,configurable:!0}),e}()),Li=Function,Fi=/^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*arguments\)/,ji=function(){function e(e){this._reflect=e||pi.Reflect}return e.prototype.isReflectionEnabled=function(){return!0},e.prototype.factory=function(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new(e.bind.apply(e,[void 0].concat(t)))}},e.prototype._zipTypesAndAnnotations=function(e,t){var n;n=void 0===e?new Array(t.length):new Array(e.length);for(var r=0;r<n.length;r++)n[r]=void 0===e?[]:e[r]!=Object?[e[r]]:[],t&&null!=t[r]&&(n[r]=n[r].concat(t[r]));return n},e.prototype._ownParameters=function(e,t){if(Fi.exec(e.toString()))return null;if(e.parameters&&e.parameters!==t.parameters)return e.parameters;var n=e.ctorParameters;if(n&&n!==t.ctorParameters){var r="function"==typeof n?n():n,i=r.map(function(e){return e&&e.type}),o=r.map(function(e){return e&&T(e.decorators)});return this._zipTypesAndAnnotations(i,o)}var l=e.hasOwnProperty(Nr)&&e[Nr],a=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata("design:paramtypes",e);return a||l?this._zipTypesAndAnnotations(a,l):new Array(e.length).fill(void 0)},e.prototype.parameters=function(e){if(!O(e))return[];var t=k(e),n=this._ownParameters(e,t);return n||t===Object||(n=this.parameters(t)),n||[]},e.prototype._ownAnnotations=function(e,t){if(e.annotations&&e.annotations!==t.annotations){var n=e.annotations;return"function"==typeof n&&n.annotations&&(n=n.annotations),n}return e.decorators&&e.decorators!==t.decorators?T(e.decorators):e.hasOwnProperty(Pr)?e[Pr]:null},e.prototype.annotations=function(e){if(!O(e))return[];var t=k(e),n=this._ownAnnotations(e,t)||[];return(t!==Object?this.annotations(t):[]).concat(n)},e.prototype._ownPropMetadata=function(e,t){if(e.propMetadata&&e.propMetadata!==t.propMetadata){var n=e.propMetadata;return"function"==typeof n&&n.propMetadata&&(n=n.propMetadata),n}if(e.propDecorators&&e.propDecorators!==t.propDecorators){var r=e.propDecorators,i={};return Object.keys(r).forEach(function(e){i[e]=T(r[e])}),i}return e.hasOwnProperty(Ar)?e[Ar]:null},e.prototype.propMetadata=function(e){if(!O(e))return{};var t=k(e),n={};if(t!==Object){var r=this.propMetadata(t);Object.keys(r).forEach(function(e){n[e]=r[e]})}var i=this._ownPropMetadata(e,t);return i&&Object.keys(i).forEach(function(e){var t=[];n.hasOwnProperty(e)&&t.push.apply(t,n[e]),t.push.apply(t,i[e]),n[e]=t}),n},e.prototype.hasLifecycleHook=function(e,t){return e instanceof Li&&t in e.prototype},e.prototype.getter=function(e){return new Function("o","return o."+e+";")},e.prototype.setter=function(e){return new Function("o","v","return o."+e+" = v;")},e.prototype.method=function(e){var t="if (!o."+e+") throw new Error('\""+e+"\" is undefined');\n        return o."+e+".apply(o, args);";return new Function("o","args",t)},e.prototype.importUri=function(e){return"object"==typeof e&&e.filePath?e.filePath:"./"+d(e)},e.prototype.resourceUri=function(e){return"./"+d(e)},e.prototype.resolveIdentifier=function(e,t,n,r){return r},e.prototype.resolveEnum=function(e,t){return e[t]},e}(),Vi=new(function(){function e(e){this.reflectionCapabilities=e}return e.prototype.updateCapabilities=function(e){this.reflectionCapabilities=e},e.prototype.factory=function(e){return this.reflectionCapabilities.factory(e)},e.prototype.parameters=function(e){return this.reflectionCapabilities.parameters(e)},e.prototype.annotations=function(e){return this.reflectionCapabilities.annotations(e)},e.prototype.propMetadata=function(e){return this.reflectionCapabilities.propMetadata(e)},e.prototype.hasLifecycleHook=function(e,t){return this.reflectionCapabilities.hasLifecycleHook(e,t)},e.prototype.getter=function(e){return this.reflectionCapabilities.getter(e)},e.prototype.setter=function(e){return this.reflectionCapabilities.setter(e)},e.prototype.method=function(e){return this.reflectionCapabilities.method(e)},e.prototype.importUri=function(e){return this.reflectionCapabilities.importUri(e)},e.prototype.resourceUri=function(e){return this.reflectionCapabilities.resourceUri(e)},e.prototype.resolveIdentifier=function(e,t,n,r){return this.reflectionCapabilities.resolveIdentifier(e,t,n,r)},e.prototype.resolveEnum=function(e,t){return this.reflectionCapabilities.resolveEnum(e,t)},e}())(new ji),zi=function(){function e(e,t,n){this.key=e,this.optional=t,this.visibility=n}return e.fromKey=function(t){return new e(t,!1,null)},e}(),Bi=[],Hi=function(){function e(e,t,n){this.key=e,this.resolvedFactories=t,this.multiProvider=n}return Object.defineProperty(e.prototype,"resolvedFactory",{get:function(){return this.resolvedFactories[0]},enumerable:!0,configurable:!0}),e}(),Wi=function(e,t){this.factory=e,this.dependencies=t},qi=new Object,Ui=function(){function e(){}return e.resolve=function(e){return I(e)},e.resolveAndCreate=function(t,n){var r=e.resolve(t);return e.fromResolvedProviders(r,n)},e.fromResolvedProviders=function(e,t){return new Gi(e,t)},e}(),Gi=function(){function e(e,t){this._constructionCounter=0,this._providers=e,this.parent=t||null;var n=e.length;this.keyIds=new Array(n),this.objs=new Array(n);for(var r=0;r<n;r++)this.keyIds[r]=e[r].key.id,this.objs[r]=qi}return e.prototype.get=function(e,t){return void 0===t&&(t=mi),this._getByKey(Ni.get(e),null,t)},e.prototype.resolveAndCreateChild=function(e){var t=Ui.resolve(e);return this.createChildFromResolved(t)},e.prototype.createChildFromResolved=function(t){var n=new e(t);return n.parent=this,n},e.prototype.resolveAndInstantiate=function(e){return this.instantiateResolved(Ui.resolve([e])[0])},e.prototype.instantiateResolved=function(e){return this._instantiateProvider(e)},e.prototype.getProviderAtIndex=function(e){if(e<0||e>=this._providers.length)throw function(e){return Error("Index "+e+" is out-of-bounds.")}(e);return this._providers[e]},e.prototype._new=function(e){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw function(t,n){return x(t,e.key,function(e){return"Cannot instantiate cyclic dependency!"+w(e)})}(this);return this._instantiateProvider(e)},e.prototype._getMaxNumberOfObjects=function(){return this.objs.length},e.prototype._instantiateProvider=function(e){if(e.multiProvider){for(var t=new Array(e.resolvedFactories.length),n=0;n<e.resolvedFactories.length;++n)t[n]=this._instantiate(e,e.resolvedFactories[n]);return t}return this._instantiate(e,e.resolvedFactories[0])},e.prototype._instantiate=function(e,t){var n,r=this,i=t.factory;try{n=t.dependencies.map(function(e){return r._getByReflectiveDependency(e)})}catch(t){throw t.addKey&&t.addKey(this,e.key),t}var o;try{o=i.apply(void 0,n)}catch(t){throw function(t,n,r,i){return x(t,e.key,function(e){var t=d(e[0].token);return n.message+": Error during instantiation of "+t+"!"+w(e)+"."},n)}(this,t)}return o},e.prototype._getByReflectiveDependency=function(e){return this._getByKey(e.key,e.visibility,e.optional?null:mi)},e.prototype._getByKey=function(t,n,r){return t===e.INJECTOR_KEY?this:n instanceof ai?this._getByKeySelf(t,r):this._getByKeyDefault(t,r,n)},e.prototype._getObjByKeyId=function(e){for(var t=0;t<this.keyIds.length;t++)if(this.keyIds[t]===e)return this.objs[t]===qi&&(this.objs[t]=this._new(this._providers[t])),this.objs[t];return qi},e.prototype._throwOrNull=function(e,t){if(t!==mi)return t;throw function(t,n){return x(t,e,function(e){return"No provider for "+d(e[0].token)+"!"+w(e)})}(this)},e.prototype._getByKeySelf=function(e,t){var n=this._getObjByKeyId(e.id);return n!==qi?n:this._throwOrNull(e,t)},e.prototype._getByKeyDefault=function(t,n,r){var i;for(i=r instanceof si?this.parent:this;i instanceof e;){var o=i,l=o._getObjByKeyId(t.id);if(l!==qi)return l;i=o.parent}return null!==i?i.get(t.token,n):this._throwOrNull(t,n)},Object.defineProperty(e.prototype,"displayName",{get:function(){return"ReflectiveInjector(providers: ["+function(e,t){for(var n=new Array(e._providers.length),r=0;r<e._providers.length;++r)n[r]=t(e.getProviderAtIndex(r));return n}(this,function(e){return' "'+e.key.displayName+'" '}).join(", ")+"])"},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.displayName},e.INJECTOR_KEY=Ni.get(yi),e}(),Ki=new Mr("Application Initializer"),$i=function(){function e(e){var t=this;this.appInits=e,this.initialized=!1,this.done=!1,this.donePromise=new Promise(function(e,n){t.resolve=e,t.reject=n})}return e.prototype.runInitializers=function(){var e=this;if(!this.initialized){var t=[],n=function(){e.done=!0,e.resolve()};if(this.appInits)for(var r=0;r<this.appInits.length;r++){var i=this.appInits[r]();A(i)&&t.push(i)}Promise.all(t).then(function(){n()}).catch(function(t){e.reject(t)}),0===t.length&&n(),this.initialized=!0}},e}(),Zi=new Mr("AppId"),Qi={provide:Zi,useFactory:F,deps:[]},Yi=new Mr("Platform Initializer"),Xi=new Mr("Platform ID"),Ji=new Mr("appBootstrapListener"),eo=new Mr("Application Packages Root URL"),to=function(){function e(){}return e.prototype.log=function(e){console.log(e)},e.prototype.warn=function(e){console.warn(e)},e.ctorParameters=function(){return[]},e}(),no=function(e,t){this.ngModuleFactory=e,this.componentFactories=t},ro=function(){function e(){}return e.prototype.compileModuleSync=function(e){throw V()},e.prototype.compileModuleAsync=function(e){throw V()},e.prototype.compileModuleAndAllComponentsSync=function(e){throw V()},e.prototype.compileModuleAndAllComponentsAsync=function(e){throw V()},e.prototype.clearCache=function(){},e.prototype.clearCacheFor=function(e){},e}(),io=new Mr("compilerOptions"),oo=function(){},lo=function(){},ao=function(){},so="ngComponent",uo=function(){function e(){}return e.prototype.resolveComponentFactory=function(e){throw z(e)},e}(),co=function(){function e(){}return e.NULL=new uo,e}(),po=function(){function e(e,t,n){this._parent=t,this._ngModule=n,this._factories=new Map;for(var r=0;r<e.length;r++){var i=e[r];this._factories.set(i.componentType,i)}}return e.prototype.resolveComponentFactory=function(e){var t=this._factories.get(e);if(!t&&this._parent&&(t=this._parent.resolveComponentFactory(e)),!t)throw z(e);return new fo(t,this._ngModule)},e}(),fo=function(e){function t(t,n){var r=e.call(this)||this;return r.factory=t,r.ngModule=n,r}return Object(Tr.__extends)(t,e),Object.defineProperty(t.prototype,"selector",{get:function(){return this.factory.selector},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentType",{get:function(){return this.factory.componentType},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngContentSelectors",{get:function(){return this.factory.ngContentSelectors},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputs",{get:function(){return this.factory.inputs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){return this.factory.outputs},enumerable:!0,configurable:!0}),t.prototype.create=function(e,t,n,r){return this.factory.create(e,t,n,r||this.ngModule)},t}(ao),ho=function(){},mo=function(){},go=B(),yo=go?H:function(e,t){return G},vo=go?W:function(e,t){return t},bo=go?q:function(e,t){return null},_o=go?U:function(e){return null},wo=function(e){function t(t){void 0===t&&(t=!1);var n=e.call(this)||this;return n.__isAsync=t,n}return Object(Tr.__extends)(t,e),t.prototype.emit=function(t){e.prototype.next.call(this,t)},t.prototype.subscribe=function(t,n,r){var i,o=function(e){return null},l=function(){return null};return t&&"object"==typeof t?(i=this.__isAsync?function(e){setTimeout(function(){return t.next(e)})}:function(e){t.next(e)},t.error&&(o=this.__isAsync?function(e){setTimeout(function(){return t.error(e)})}:function(e){t.error(e)}),t.complete&&(l=this.__isAsync?function(){setTimeout(function(){return t.complete()})}:function(){t.complete()})):(i=this.__isAsync?function(e){setTimeout(function(){return t(e)})}:function(e){t(e)},n&&(o=this.__isAsync?function(e){setTimeout(function(){return n(e)})}:function(e){n(e)}),r&&(l=this.__isAsync?function(){setTimeout(function(){return r()})}:function(){r()})),e.prototype.subscribe.call(this,i,o,l)},t}(Rr.Subject),xo=function(){function e(e){var t=e.enableLongStackTrace,n=void 0!==t&&t;if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new wo(!1),this.onMicrotaskEmpty=new wo(!1),this.onStable=new wo(!1),this.onError=new wo(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched(),this._nesting=0,this._outer=this._inner=Zone.current,Zone.wtfZoneSpec&&(this._inner=this._inner.fork(Zone.wtfZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(this._inner=this._inner.fork(Zone.longStackTraceZoneSpec)),function(e){e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:function(t,n,r,i,o,l){try{return Z(e),t.invokeTask(r,i,o,l)}finally{Q(e)}},onInvoke:function(t,n,r,i,o,l,a){try{return Z(e),t.invoke(r,i,o,l,a)}finally{Q(e)}},onHasTask:function(t,n,r,i){t.hasTask(r,i),n===r&&("microTask"==i.change?(e.hasPendingMicrotasks=i.microTask,$(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:function(t,n,r,i){return t.handleError(r,i),e.runOutsideAngular(function(){return e.onError.emit(i)}),!1}})}(this)}return e.isInAngularZone=function(){return!0===Zone.current.get("isAngularZone")},e.assertInAngularZone=function(){if(!e.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")},e.assertNotInAngularZone=function(){if(e.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")},e.prototype.run=function(e,t,n){return this._inner.run(e,t,n)},e.prototype.runTask=function(e,t,n,r){var i=this._inner,o=i.scheduleEventTask("NgZoneEvent: "+r,e,Co,K,K);try{return i.runTask(o,t,n)}finally{i.cancelTask(o)}},e.prototype.runGuarded=function(e,t,n){return this._inner.runGuarded(e,t,n)},e.prototype.runOutsideAngular=function(e){return this._outer.run(e)},e}(),Co={},Eo=function(){function e(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new wo,this.onMicrotaskEmpty=new wo,this.onStable=new wo,this.onError=new wo}return e.prototype.run=function(e){return e()},e.prototype.runGuarded=function(e){return e()},e.prototype.runOutsideAngular=function(e){return e()},e.prototype.runTask=function(e){return e()},e}(),So=function(){function e(e){this._ngZone=e,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this._watchAngularEvents()}return e.prototype._watchAngularEvents=function(){var e=this;this._ngZone.onUnstable.subscribe({next:function(){e._didWork=!0,e._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.subscribe({next:function(){xo.assertNotInAngularZone(),u(function(){e._isZoneStable=!0,e._runCallbacksIfReady()})}})})},e.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},e.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount},e.prototype.isStable=function(){return this._isZoneStable&&0==this._pendingCount&&!this._ngZone.hasPendingMacrotasks},e.prototype._runCallbacksIfReady=function(){var e=this;this.isStable()?u(function(){for(;0!==e._callbacks.length;)e._callbacks.pop()(e._didWork);e._didWork=!1}):this._didWork=!0},e.prototype.whenStable=function(e){this._callbacks.push(e),this._runCallbacksIfReady()},e.prototype.getPendingRequestCount=function(){return this._pendingCount},e.prototype.findProviders=function(e,t,n){return[]},e}(),Oo=function(){function e(){this._applications=new Map,To.addToWindow(this)}return e.prototype.registerApplication=function(e,t){this._applications.set(e,t)},e.prototype.unregisterApplication=function(e){this._applications.delete(e)},e.prototype.unregisterAllApplications=function(){this._applications.clear()},e.prototype.getTestability=function(e){return this._applications.get(e)||null},e.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},e.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},e.prototype.findTestabilityInTree=function(e,t){return void 0===t&&(t=!0),To.findTestabilityInTree(this,e,t)},e.ctorParameters=function(){return[]},e}(),To=new(function(){function e(){}return e.prototype.addToWindow=function(e){},e.prototype.findTestabilityInTree=function(e,t,n){return null},e}()),ko=!0,Do=!1,Io=new Mr("AllowMultipleToken"),Ro=function(e,t){this.name=e,this.token=t},Mo=function(){function e(e){this._injector=e,this._modules=[],this._destroyListeners=[],this._destroyed=!1}return e.prototype.bootstrapModuleFactory=function(e,t){var n=this,r=function(e){return"noop"===e?new Eo:("zone.js"===e?void 0:e)||new xo({enableLongStackTrace:J()})}(t?t.ngZone:void 0);return r.run(function(){var t=yi.create([{provide:xo,useValue:r}],n.injector),i=e.create(t),o=i.injector.get(Pi,null);if(!o)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return i.onDestroy(function(){return le(n._modules,i)}),r.runOutsideAngular(function(){return r.onError.subscribe({next:function(e){o.handleError(e)}})}),function(e,t,r){try{var o=function(){var e=i.injector.get($i);return e.runInitializers(),e.donePromise.then(function(){return n._moduleDoBootstrap(i),i})}();return A(o)?o.catch(function(n){throw t.runOutsideAngular(function(){return e.handleError(n)}),n}):o}catch(n){throw t.runOutsideAngular(function(){return e.handleError(n)}),n}}(o,r)})},e.prototype.bootstrapModule=function(e,t){var n=this;void 0===t&&(t=[]);var r=this.injector.get(oo),i=oe({},t);return r.createCompiler([i]).compileModuleAsync(e).then(function(e){return n.bootstrapModuleFactory(e,i)})},e.prototype._moduleDoBootstrap=function(e){var t=e.injector.get(Po);if(e._bootstrapComponents.length>0)e._bootstrapComponents.forEach(function(e){return t.bootstrap(e)});else{if(!e.instance.ngDoBootstrap)throw new Error("The module "+d(e.instance.constructor)+' was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.');e.instance.ngDoBootstrap(t)}this._modules.push(e)},e.prototype.onDestroy=function(e){this._destroyListeners.push(e)},Object.defineProperty(e.prototype,"injector",{get:function(){return this._injector},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(function(e){return e.destroy()}),this._destroyListeners.forEach(function(e){return e()}),this._destroyed=!0},Object.defineProperty(e.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),e}(),Po=function(){function e(e,t,n,r,i,o){var l=this;this._zone=e,this._console=t,this._injector=n,this._exceptionHandler=r,this._componentFactoryResolver=i,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=J(),this._zone.onMicrotaskEmpty.subscribe({next:function(){l._zone.run(function(){l.tick()})}});var a=new kr.a(function(e){l._stable=l._zone.isStable&&!l._zone.hasPendingMacrotasks&&!l._zone.hasPendingMicrotasks,l._zone.runOutsideAngular(function(){e.next(l._stable),e.complete()})}),s=new kr.a(function(e){var t;l._zone.runOutsideAngular(function(){t=l._zone.onStable.subscribe(function(){xo.assertNotInAngularZone(),u(function(){l._stable||l._zone.hasPendingMacrotasks||l._zone.hasPendingMicrotasks||(l._stable=!0,e.next(!0))})})});var n=l._zone.onUnstable.subscribe(function(){xo.assertInAngularZone(),l._stable&&(l._stable=!1,l._zone.runOutsideAngular(function(){e.next(!1)}))});return function(){t.unsubscribe(),n.unsubscribe()}});this.isStable=Object(Dr.a)(a,Ir.a.call(s))}return e.prototype.bootstrap=function(e,t){var n=this;if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");var r;r=e instanceof ao?e:this._componentFactoryResolver.resolveComponentFactory(e),this.componentTypes.push(r.componentType);var i=r instanceof fo?null:this._injector.get(ho),o=r.create(yi.NULL,[],t||r.selector,i);o.onDestroy(function(){n._unloadComponent(o)});var l=o.injector.get(So,null);return l&&o.injector.get(Oo).registerApplication(o.location.nativeElement,l),this._loadComponent(o),J()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),o},e.prototype.tick=function(){var t=this;if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");var n=e._tickScope();try{this._runningTick=!0,this._views.forEach(function(e){return e.detectChanges()}),this._enforceNoNewChanges&&this._views.forEach(function(e){return e.checkNoChanges()})}catch(e){this._zone.runOutsideAngular(function(){return t._exceptionHandler.handleError(e)})}finally{this._runningTick=!1,vo(n)}},e.prototype.attachView=function(e){var t=e;this._views.push(t),t.attachToAppRef(this)},e.prototype.detachView=function(e){var t=e;le(this._views,t),t.detachFromAppRef()},e.prototype._loadComponent=function(e){this.attachView(e.hostView),this.tick(),this.components.push(e),this._injector.get(Ji,[]).concat(this._bootstrapListeners).forEach(function(t){return t(e)})},e.prototype._unloadComponent=function(e){this.detachView(e.hostView),le(this.components,e)},e.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(e){return e.destroy()})},Object.defineProperty(e.prototype,"viewCount",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),e._tickScope=yo("ApplicationRef#tick()"),e}(),No=function(e,t,n,r,i,o){this.id=e,this.templateUrl=t,this.slotCount=n,this.encapsulation=r,this.styles=i,this.animations=o},Ao=function(){},Lo=function(){},Fo=function(){},jo=function(){},Vo=function(){var e={Important:1,DashCase:2};return e[e.Important]="Important",e[e.DashCase]="DashCase",e}(),zo=function(){},Bo=function(e){this.nativeElement=e},Ho=function(){},Wo=new Map,qo=function(){function e(){this.dirty=!0,this._results=[],this.changes=new wo}return Object.defineProperty(e.prototype,"length",{get:function(){return this._results.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._results[0]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this._results[this.length-1]},enumerable:!0,configurable:!0}),e.prototype.map=function(e){return this._results.map(e)},e.prototype.filter=function(e){return this._results.filter(e)},e.prototype.find=function(e){return this._results.find(e)},e.prototype.reduce=function(e,t){return this._results.reduce(e,t)},e.prototype.forEach=function(e){this._results.forEach(e)},e.prototype.some=function(e){return this._results.some(e)},e.prototype.toArray=function(){return this._results.slice()},e.prototype[s()]=function(){return this._results[s()]()},e.prototype.toString=function(){return this._results.toString()},e.prototype.reset=function(e){this._results=ue(e),this.dirty=!1},e.prototype.notifyOnChanges=function(){this.changes.emit(this)},e.prototype.setDirty=function(){this.dirty=!0},e.prototype.destroy=function(){this.changes.complete(),this.changes.unsubscribe()},e}(),Uo=function(){},Go={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"},Ko=function(){function e(e,t){this._compiler=e,this._config=t||Go}return e.prototype.load=function(e){return this._compiler instanceof ro?this.loadFactory(e):this.loadAndCompile(e)},e.prototype.loadAndCompile=function(e){var t=this,r=e.split("#"),i=r[0],o=r[1];return void 0===o&&(o="default"),n("YuZA")(i).then(function(e){return e[o]}).then(function(e){return ce(e,i,o)}).then(function(e){return t._compiler.compileModuleAsync(e)})},e.prototype.loadFactory=function(e){var t=e.split("#"),r=t[0],i=t[1],o="NgFactory";return void 0===i&&(i="default",o=""),n("YuZA")(this._config.factoryPathPrefix+r+this._config.factoryPathSuffix).then(function(e){return e[i+o]}).then(function(e){return ce(e,r,i)})},e}(),$o=function(){},Zo=function(){},Qo=function(){},Yo=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(Tr.__extends)(t,e),t}(Qo),Xo=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(Tr.__extends)(t,e),t}(Yo),Jo=function(){function e(e,t,n){this._debugContext=n,this.nativeNode=e,t&&t instanceof el?t.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(e.prototype,"injector",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentInstance",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),e}(),el=function(e){function t(t,n,r){var i=e.call(this,t,n,r)||this;return i.properties={},i.attributes={},i.classes={},i.styles={},i.childNodes=[],i.nativeElement=t,i}return Object(Tr.__extends)(t,e),t.prototype.addChild=function(e){e&&(this.childNodes.push(e),e.parent=this)},t.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);-1!==t&&(e.parent=null,this.childNodes.splice(t,1))},t.prototype.insertChildrenAfter=function(e,t){var n=this,r=this.childNodes.indexOf(e);-1!==r&&((i=this.childNodes).splice.apply(i,[r+1,0].concat(t)),t.forEach(function(e){e.parent&&e.parent.removeChild(e),e.parent=n}));var i},t.prototype.insertBefore=function(e,t){var n=this.childNodes.indexOf(e);-1===n?this.addChild(t):(t.parent&&t.parent.removeChild(t),t.parent=this,this.childNodes.splice(n,0,t))},t.prototype.query=function(e){return this.queryAll(e)[0]||null},t.prototype.queryAll=function(e){var t=[];return pe(this,e,t),t},t.prototype.queryAllNodes=function(e){var t=[];return fe(this,e,t),t},Object.defineProperty(t.prototype,"children",{get:function(){return this.childNodes.filter(function(e){return e instanceof t})},enumerable:!0,configurable:!0}),t.prototype.triggerEventHandler=function(e,t){this.listeners.forEach(function(n){n.name==e&&n.callback(t)})},t}(Jo),tl=new Map,nl=function(){function e(e){this.wrapped=e}return e.wrap=function(t){return new e(t)},e}(),rl=function(){function e(){this.hasWrappedValue=!1}return e.prototype.unwrap=function(e){return e instanceof nl?(this.hasWrappedValue=!0,e.wrapped):e},e.prototype.reset=function(){this.hasWrappedValue=!1},e}(),il=function(){function e(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}return e.prototype.isFirstChange=function(){return this.firstChange},e}(),ol=function(){function e(){}return e.prototype.supports=function(e){return ye(e)},e.prototype.create=function(e){return new al(e)},e}(),ll=function(e,t){return t},al=function(){function e(e){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=e||ll}return e.prototype.forEachItem=function(e){var t;for(t=this._itHead;null!==t;t=t._next)e(t)},e.prototype.forEachOperation=function(e){for(var t=this._itHead,n=this._removalsHead,r=0,i=null;t||n;){var o=!n||t&&t.currentIndex<be(n,r,i)?t:n,l=be(o,r,i),a=o.currentIndex;if(o===n)r--,n=n._nextRemoved;else if(t=t._next,null==o.previousIndex)r++;else{i||(i=[]);var s=l-r,u=a-r;if(s!=u){for(var c=0;c<s;c++){var d=c<i.length?i[c]:i[c]=0,p=d+c;u<=p&&p<s&&(i[c]=d+1)}i[o.previousIndex]=u-s}}l!==a&&e(o,l,a)}},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousItHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachMovedItem=function(e){var t;for(t=this._movesHead;null!==t;t=t._nextMoved)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.forEachIdentityChange=function(e){var t;for(t=this._identityChangesHead;null!==t;t=t._nextIdentityChange)e(t)},e.prototype.diff=function(e){if(null==e&&(e=[]),!ye(e))throw new Error("Error trying to diff '"+d(e)+"'. Only arrays and iterables are allowed");return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n,r,i,o=this._itHead,l=!1;if(Array.isArray(e)){this.length=e.length;for(var a=0;a<this.length;a++)i=this._trackByFn(a,r=e[a]),null!==o&&c(o.trackById,i)?(l&&(o=this._verifyReinsertion(o,r,i,a)),c(o.item,r)||this._addIdentityChange(o,r)):(o=this._mismatch(o,r,i,a),l=!0),o=o._next}else n=0,function(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++)t(e[n]);else for(var r=e[s()](),i=void 0;!(i=r.next()).done;)t(i.value)}(e,function(e){i=t._trackByFn(n,e),null!==o&&c(o.trackById,i)?(l&&(o=t._verifyReinsertion(o,e,i,n)),c(o.item,e)||t._addIdentityChange(o,e)):(o=t._mismatch(o,e,i,n),l=!0),o=o._next,n++}),this.length=n;return this._truncate(o),this.collection=e,this.isDirty},Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead},enumerable:!0,configurable:!0}),e.prototype._reset=function(){if(this.isDirty){var e=void 0,t=void 0;for(e=this._previousItHead=this._itHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._additionsHead;null!==e;e=e._nextAdded)e.previousIndex=e.currentIndex;for(this._additionsHead=this._additionsTail=null,e=this._movesHead;null!==e;e=t)e.previousIndex=e.currentIndex,t=e._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}},e.prototype._mismatch=function(e,t,n,r){var i;return null===e?i=this._itTail:(i=e._prev,this._remove(e)),null!==(e=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(c(e.item,t)||this._addIdentityChange(e,t),this._moveAfter(e,i,r)):null!==(e=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(c(e.item,t)||this._addIdentityChange(e,t),this._reinsertAfter(e,i,r)):e=this._addAfter(new sl(t,n),i,r),e},e.prototype._verifyReinsertion=function(e,t,n,r){var i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==i?e=this._reinsertAfter(i,e._prev,r):e.currentIndex!=r&&(e.currentIndex=r,this._addToMoves(e,r)),e},e.prototype._truncate=function(e){for(;null!==e;){var t=e._next;this._addToRemovals(this._unlink(e)),e=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)},e.prototype._reinsertAfter=function(e,t,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(e);var r=e._prevRemoved,i=e._nextRemoved;return null===r?this._removalsHead=i:r._nextRemoved=i,null===i?this._removalsTail=r:i._prevRemoved=r,this._insertAfter(e,t,n),this._addToMoves(e,n),e},e.prototype._moveAfter=function(e,t,n){return this._unlink(e),this._insertAfter(e,t,n),this._addToMoves(e,n),e},e.prototype._addAfter=function(e,t,n){return this._insertAfter(e,t,n),this._additionsTail=null===this._additionsTail?this._additionsHead=e:this._additionsTail._nextAdded=e,e},e.prototype._insertAfter=function(e,t,n){var r=null===t?this._itHead:t._next;return e._next=r,e._prev=t,null===r?this._itTail=e:r._prev=e,null===t?this._itHead=e:t._next=e,null===this._linkedRecords&&(this._linkedRecords=new cl),this._linkedRecords.put(e),e.currentIndex=n,e},e.prototype._remove=function(e){return this._addToRemovals(this._unlink(e))},e.prototype._unlink=function(e){null!==this._linkedRecords&&this._linkedRecords.remove(e);var t=e._prev,n=e._next;return null===t?this._itHead=n:t._next=n,null===n?this._itTail=t:n._prev=t,e},e.prototype._addToMoves=function(e,t){return e.previousIndex===t?e:(this._movesTail=null===this._movesTail?this._movesHead=e:this._movesTail._nextMoved=e,e)},e.prototype._addToRemovals=function(e){return null===this._unlinkedRecords&&(this._unlinkedRecords=new cl),this._unlinkedRecords.put(e),e.currentIndex=null,e._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=e,e._prevRemoved=null):(e._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=e),e},e.prototype._addIdentityChange=function(e,t){return e.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=e:this._identityChangesTail._nextIdentityChange=e,e},e}(),sl=function(e,t){this.item=e,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null},ul=function(){function e(){this._head=null,this._tail=null}return e.prototype.add=function(e){null===this._head?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):(this._tail._nextDup=e,e._prevDup=this._tail,e._nextDup=null,this._tail=e)},e.prototype.get=function(e,t){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===t||t<=n.currentIndex)&&c(n.trackById,e))return n;return null},e.prototype.remove=function(e){var t=e._prevDup,n=e._nextDup;return null===t?this._head=n:t._nextDup=n,null===n?this._tail=t:n._prevDup=t,null===this._head},e}(),cl=function(){function e(){this.map=new Map}return e.prototype.put=function(e){var t=e.trackById,n=this.map.get(t);n||(n=new ul,this.map.set(t,n)),n.add(e)},e.prototype.get=function(e,t){var n=this.map.get(e);return n?n.get(e,t):null},e.prototype.remove=function(e){var t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e},Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.map.clear()},e}(),dl=function(){function e(){}return e.prototype.supports=function(e){return e instanceof Map||ve(e)},e.prototype.create=function(){return new pl},e}(),pl=function(){function e(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}return Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),e.prototype.forEachItem=function(e){var t;for(t=this._mapHead;null!==t;t=t._next)e(t)},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousMapHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachChangedItem=function(e){var t;for(t=this._changesHead;null!==t;t=t._nextChanged)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.diff=function(e){if(e){if(!(e instanceof Map||ve(e)))throw new Error("Error trying to diff '"+d(e)+"'. Only maps and objects are allowed")}else e=new Map;return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n=this._mapHead;if(this._appendAfter=null,this._forEach(e,function(e,r){if(n&&n.key===r)t._maybeAddToChanges(n,e),t._appendAfter=n,n=n._next;else{var i=t._getOrCreateRecordForKey(r,e);n=t._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(var r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},e.prototype._insertBeforeOrAppend=function(e,t){if(e){var n=e._prev;return t._next=e,t._prev=n,e._prev=t,n&&(n._next=t),e===this._mapHead&&(this._mapHead=t),this._appendAfter=e,e}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null},e.prototype._getOrCreateRecordForKey=function(e,t){if(this._records.has(e)){var n=this._records.get(e);this._maybeAddToChanges(n,t);var r=n._prev,i=n._next;return r&&(r._next=i),i&&(i._prev=r),n._next=null,n._prev=null,n}var o=new fl(e);return this._records.set(e,o),o.currentValue=t,this._addToAdditions(o),o},e.prototype._reset=function(){if(this.isDirty){var e=void 0;for(this._previousMapHead=this._mapHead,e=this._previousMapHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._changesHead;null!==e;e=e._nextChanged)e.previousValue=e.currentValue;for(e=this._additionsHead;null!=e;e=e._nextAdded)e.previousValue=e.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},e.prototype._maybeAddToChanges=function(e,t){c(t,e.currentValue)||(e.previousValue=e.currentValue,e.currentValue=t,this._addToChanges(e))},e.prototype._addToAdditions=function(e){null===this._additionsHead?this._additionsHead=this._additionsTail=e:(this._additionsTail._nextAdded=e,this._additionsTail=e)},e.prototype._addToChanges=function(e){null===this._changesHead?this._changesHead=this._changesTail=e:(this._changesTail._nextChanged=e,this._changesTail=e)},e.prototype._forEach=function(e,t){e instanceof Map?e.forEach(t):Object.keys(e).forEach(function(n){return t(e[n],n)})},e}(),fl=function(e){this.key=e,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null},hl=function(){function e(e){this.factories=e}return e.create=function(t,n){if(null!=n){var r=n.factories.slice();return t=t.concat(r),new e(t)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return e.create(t,n)},deps:[[e,new si,new oi]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(null!=t)return t;throw new Error("Cannot find a differ supporting object '"+e+"' of type '"+(e.name||typeof e)+"'")},e}(),ml=function(){function e(e){this.factories=e}return e.create=function(t,n){if(n){var r=n.factories.slice();t=t.concat(r)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return e.create(t,n)},deps:[[e,new si,new oi]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(t)return t;throw new Error("Cannot find a differ supporting object '"+e+"'")},e}(),gl=[new dl],yl=new hl([new ol]),vl=new ml(gl),bl=te(null,"core",[{provide:Xi,useValue:"unknown"},{provide:Mo,deps:[yi]},{provide:Oo,deps:[]},{provide:to,deps:[]}]),_l=new Mr("LocaleId"),wl=new Mr("Translations"),xl=new Mr("TranslationsFormat"),Cl=function(){var e={Error:0,Warning:1,Ignore:2};return e[e.Error]="Error",e[e.Warning]="Warning",e[e.Ignore]="Ignore",e}(),El=function(e){},Sl=function(){var e={NONE:0,HTML:1,STYLE:2,SCRIPT:3,URL:4,RESOURCE_URL:5};return e[e.NONE]="NONE",e[e.HTML]="HTML",e[e.STYLE]="STYLE",e[e.SCRIPT]="SCRIPT",e[e.URL]="URL",e[e.RESOURCE_URL]="RESOURCE_URL",e}(),Ol=function(){},Tl=function(){},kl={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0},Dl=function(){},Il=new Map,Rl="$$undefined",Ml="$$empty",Pl=0,Nl=new WeakMap,Al=/^:([^:]+):(.+)$/,Ll=[],Fl={},jl=new Object,Vl=Pe(yi),zl=Pe(ho),Bl=new Object,Hl=function(e){function t(t,n,r,i,o,l){var a=e.call(this)||this;return a.selector=t,a.componentType=n,a._inputs=i,a._outputs=o,a.ngContentSelectors=l,a.viewDefFactory=r,a}return Object(Tr.__extends)(t,e),Object.defineProperty(t.prototype,"inputs",{get:function(){var e=[],t=this._inputs;for(var n in t)e.push({propName:n,templateName:t[n]});return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){var e=[];for(var t in this._outputs)e.push({propName:t,templateName:this._outputs[t]});return e},enumerable:!0,configurable:!0}),t.prototype.create=function(e,t,n,r){if(!r)throw new Error("ngModule should be provided");var i=Xe(this.viewDefFactory),o=i.nodes[0].element.componentProvider.nodeIndex,l=kl.createRootView(e,t||[],n,i,r,Bl),a=Te(l,o).instance;return n&&l.renderer.setAttribute(Oe(l,0).renderElement,"ng-version",ri.full),new Wl(l,new Ul(l),a)},t}(ao),Wl=function(e){function t(t,n,r){var i=e.call(this)||this;return i._view=t,i._viewRef=n,i._component=r,i._elDef=i._view.def.nodes[0],i.hostView=n,i.changeDetectorRef=n,i.instance=r,i}return Object(Tr.__extends)(t,e),Object.defineProperty(t.prototype,"location",{get:function(){return new Bo(Oe(this._view,this._elDef.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"injector",{get:function(){return new Kl(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentType",{get:function(){return this._component.constructor},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){this._viewRef.destroy()},t.prototype.onDestroy=function(e){this._viewRef.onDestroy(e)},t}(lo),ql=function(){function e(e,t,n){this._view=e,this._elDef=t,this._data=n,this._embeddedViews=[]}return Object.defineProperty(e.prototype,"element",{get:function(){return new Bo(this._data.renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return new Kl(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"parentInjector",{get:function(){for(var e=this._view,t=this._elDef.parent;!t&&e;)t=We(e),e=e.parent;return e?new Kl(e,t):new Kl(this._view,null)},enumerable:!0,configurable:!0}),e.prototype.clear=function(){for(var e=this._embeddedViews.length-1;e>=0;e--){var t=vt(this._data,e);kl.destroyView(t)}},e.prototype.get=function(e){var t=this._embeddedViews[e];if(t){var n=new Ul(t);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(e.prototype,"length",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),e.prototype.createEmbeddedView=function(e,t,n){var r=e.createEmbeddedView(t||{});return this.insert(r,n),r},e.prototype.createComponent=function(e,t,n,r,i){var o=n||this.parentInjector;i||e instanceof fo||(i=o.get(ho));var l=e.create(o,r,void 0,i);return this.insert(l.hostView,t),l},e.prototype.insert=function(e,t){if(e.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");var n=e;return function(e,t,n,r){var i=t.viewContainer._embeddedViews;null!==n&&void 0!==n||(n=i.length),r.viewContainerParent=e,wt(i,n,r),function(e,t){var n=He(t);if(n&&n!==e&&!(16&t.state)){t.state|=16;var r=n.template._projectedViews;r||(r=n.template._projectedViews=[]),r.push(t),function(e,n){if(!(4&n.flags)){t.parent.def.nodeFlags|=4,n.flags|=4;for(var r=n.parent;r;)r.childFlags|=4,r=r.parent}}(0,t.parentNodeDef)}}(t,r),kl.dirtyParentQueries(r),bt(t,n>0?i[n-1]:null,r)}(this._view,this._data,t,n._view),n.attachToViewContainerRef(this),e},e.prototype.move=function(e,t){if(e.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");var n=this._embeddedViews.indexOf(e._view);return function(e,t,r){var i=e.viewContainer._embeddedViews,o=i[n];xt(i,n),null==r&&(r=i.length),wt(i,r,o),kl.dirtyParentQueries(o),_t(o),bt(e,r>0?i[r-1]:null,o)}(this._data,0,t),e},e.prototype.indexOf=function(e){return this._embeddedViews.indexOf(e._view)},e.prototype.remove=function(e){var t=vt(this._data,e);t&&kl.destroyView(t)},e.prototype.detach=function(e){var t=vt(this._data,e);return t?new Ul(t):null},e}(),Ul=function(){function e(e){this._view=e,this._viewContainerRef=null,this._appRef=null}return Object.defineProperty(e.prototype,"rootNodes",{get:function(){return function(e){var t=[];return Je(e,0,void 0,void 0,t),t}(this._view)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"destroyed",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),e.prototype.markForCheck=function(){Ve(this._view)},e.prototype.detach=function(){this._view.state&=-5},e.prototype.detectChanges=function(){var e=this._view.root.rendererFactory;e.begin&&e.begin();try{kl.checkAndUpdateView(this._view)}finally{e.end&&e.end()}},e.prototype.checkNoChanges=function(){kl.checkNoChangesView(this._view)},e.prototype.reattach=function(){this._view.state|=4},e.prototype.onDestroy=function(e){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(e)},e.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),kl.destroyView(this._view)},e.prototype.detachFromAppRef=function(){this._appRef=null,_t(this._view),kl.dirtyParentQueries(this._view)},e.prototype.attachToAppRef=function(e){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=e},e.prototype.attachToViewContainerRef=function(e){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=e},e}(),Gl=function(e){function t(t,n){var r=e.call(this)||this;return r._parentView=t,r._def=n,r}return Object(Tr.__extends)(t,e),t.prototype.createEmbeddedView=function(e){return new Ul(kl.createEmbeddedView(this._parentView,this._def,this._def.element.template,e))},Object.defineProperty(t.prototype,"elementRef",{get:function(){return new Bo(Oe(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),t}($o),Kl=function(){function e(e,t){this.view=e,this.elDef=t}return e.prototype.get=function(e,t){return void 0===t&&(t=yi.THROW_IF_NOT_FOUND),kl.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:e,tokenKey:Pe(e)},t)},e}(),$l=function(){function e(e){this.delegate=e}return e.prototype.selectRootElement=function(e){return this.delegate.selectRootElement(e)},e.prototype.createElement=function(e,t){var n=it(t),r=this.delegate.createElement(n[1],n[0]);return e&&this.delegate.appendChild(e,r),r},e.prototype.createViewRoot=function(e){return e},e.prototype.createTemplateAnchor=function(e){var t=this.delegate.createComment("");return e&&this.delegate.appendChild(e,t),t},e.prototype.createText=function(e,t){var n=this.delegate.createText(t);return e&&this.delegate.appendChild(e,n),n},e.prototype.projectNodes=function(e,t){for(var n=0;n<t.length;n++)this.delegate.appendChild(e,t[n])},e.prototype.attachViewAfter=function(e,t){for(var n=this.delegate.parentNode(e),r=this.delegate.nextSibling(e),i=0;i<t.length;i++)this.delegate.insertBefore(n,t[i],r)},e.prototype.detachView=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=this.delegate.parentNode(n);this.delegate.removeChild(r,n)}},e.prototype.destroyView=function(e,t){for(var n=0;n<t.length;n++)this.delegate.destroyNode(t[n])},e.prototype.listen=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.listenGlobal=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.setElementProperty=function(e,t,n){this.delegate.setProperty(e,t,n)},e.prototype.setElementAttribute=function(e,t,n){var r=it(t),i=r[0],o=r[1];null!=n?this.delegate.setAttribute(e,o,n,i):this.delegate.removeAttribute(e,o,i)},e.prototype.setBindingDebugInfo=function(e,t,n){},e.prototype.setElementClass=function(e,t,n){n?this.delegate.addClass(e,t):this.delegate.removeClass(e,t)},e.prototype.setElementStyle=function(e,t,n){null!=n?this.delegate.setStyle(e,t,n):this.delegate.removeStyle(e,t)},e.prototype.invokeElementMethod=function(e,t,n){e[t].apply(e,n)},e.prototype.setText=function(e,t){this.delegate.setValue(e,t)},e.prototype.animate=function(){throw new Error("Renderer.animate is no longer supported!")},e}(),Zl=function(){function e(e,t,n,r){this._moduleType=e,this._parent=t,this._bootstrapComponents=n,this._def=r,this._destroyListeners=[],this._destroyed=!1,function(e){for(var t=e._def,n=e._providers=new Array(t.providers.length),r=0;r<t.providers.length;r++){var i=t.providers[r];4096&i.flags||(n[r]=yt(e,i))}}(this)}return e.prototype.get=function(e,t){return void 0===t&&(t=yi.THROW_IF_NOT_FOUND),gt(this,{token:e,tokenKey:Pe(e),flags:0},t)},Object.defineProperty(e.prototype,"instance",{get:function(){return this.get(this._moduleType)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentFactoryResolver",{get:function(){return this.get(co)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return this},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){if(this._destroyed)throw new Error("The ng module "+d(this.instance.constructor)+" has already been destroyed.");this._destroyed=!0,function(e,t){for(var n=e._def,r=0;r<n.providers.length;r++)if(131072&n.providers[r].flags){var i=e._providers[r];i&&i!==jl&&i.ngOnDestroy()}}(this),this._destroyListeners.forEach(function(e){return e()})},e.prototype.onDestroy=function(e){this._destroyListeners.push(e)},e}(),Ql=Pe(Lo),Yl=Pe(zo),Xl=Pe(Bo),Jl=Pe(Zo),ea=Pe($o),ta=Pe(Qo),na=Pe(yi),ra={},ia=function(){var e={CreateViewNodes:0,CheckNoChanges:1,CheckNoChangesProjectedViews:2,CheckAndUpdate:3,CheckAndUpdateProjectedViews:4,Destroy:5};return e[e.CreateViewNodes]="CreateViewNodes",e[e.CheckNoChanges]="CheckNoChanges",e[e.CheckNoChangesProjectedViews]="CheckNoChangesProjectedViews",e[e.CheckAndUpdate]="CheckAndUpdate",e[e.CheckAndUpdateProjectedViews]="CheckAndUpdateProjectedViews",e[e.Destroy]="Destroy",e}(),oa=!1,la=new Map,aa=new Map,sa=function(){var e={create:0,detectChanges:1,checkNoChanges:2,destroy:3,handleEvent:4};return e[e.create]="create",e[e.detectChanges]="detectChanges",e[e.checkNoChanges]="checkNoChanges",e[e.destroy]="destroy",e[e.handleEvent]="handleEvent",e}(),ua=/([A-Z])/g,ca=function(){function e(e,t){this.view=e,this.nodeIndex=t,null==t&&(this.nodeIndex=t=0),this.nodeDef=e.def.nodes[t];for(var n=this.nodeDef,r=e;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&r;)n=We(r),r=r.parent;this.elDef=n,this.elView=r}return Object.defineProperty(e.prototype,"elOrCompView",{get:function(){return Oe(this.elView,this.elDef.nodeIndex).componentView||this.view},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return kt(this.elView,this.elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"component",{get:function(){return this.elOrCompView.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this.elOrCompView.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){var e=[];if(this.elDef)for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&e.push(n.provider.token),t+=n.childCount}return e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){var e={};if(this.elDef){Xn(this.elView,this.elDef,e);for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&Xn(this.elView,n,e),t+=n.childCount}}return e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentRenderElement",{get:function(){var e=function(e){for(;e&&!Ge(e);)e=e.parent;return e.parent?Oe(e.parent,We(e).nodeIndex):null}(this.elOrCompView);return e?e.renderElement:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"renderNode",{get:function(){return 2&this.nodeDef.flags?qe(this.view,this.nodeDef):qe(this.elView,this.elDef)},enumerable:!0,configurable:!0}),e.prototype.logError=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r,i;2&this.nodeDef.flags?(r=this.view.def,i=this.nodeDef.nodeIndex):(r=this.elView.def,i=this.elDef.nodeIndex);var o=function(e,t){for(var n=-1,r=0;r<=t;r++)3&e.nodes[r].flags&&n++;return n}(r,i),l=-1;r.factory(function(){return++l===o?(n=e.error).bind.apply(n,[e].concat(t)):Dl;var n}),l<o&&(e.error("Illegal state: the ViewDefinitionFactory did not call the logger!"),e.error.apply(e,t))},e}(),da=function(){function e(e){this.delegate=e}return e.prototype.createRenderer=function(e,t){return new pa(this.delegate.createRenderer(e,t))},e.prototype.begin=function(){this.delegate.begin&&this.delegate.begin()},e.prototype.end=function(){this.delegate.end&&this.delegate.end()},e.prototype.whenRenderingDone=function(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)},e}(),pa=function(){function e(e){this.delegate=e}return Object.defineProperty(e.prototype,"data",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),e.prototype.destroyNode=function(e){!function(e){tl.delete(e.nativeNode)}(he(e)),this.delegate.destroyNode&&this.delegate.destroyNode(e)},e.prototype.destroy=function(){this.delegate.destroy()},e.prototype.createElement=function(e,t){var n=this.delegate.createElement(e,t),r=er();if(r){var i=new el(n,null,r);i.name=e,me(i)}return n},e.prototype.createComment=function(e){var t=this.delegate.createComment(e),n=er();return n&&me(new Jo(t,null,n)),t},e.prototype.createText=function(e){var t=this.delegate.createText(e),n=er();return n&&me(new Jo(t,null,n)),t},e.prototype.appendChild=function(e,t){var n=he(e),r=he(t);n&&r&&n instanceof el&&n.addChild(r),this.delegate.appendChild(e,t)},e.prototype.insertBefore=function(e,t,n){var r=he(e),i=he(t),o=he(n);r&&i&&r instanceof el&&r.insertBefore(o,i),this.delegate.insertBefore(e,t,n)},e.prototype.removeChild=function(e,t){var n=he(e),r=he(t);n&&r&&n instanceof el&&n.removeChild(r),this.delegate.removeChild(e,t)},e.prototype.selectRootElement=function(e){var t=this.delegate.selectRootElement(e),n=er();return n&&me(new el(t,null,n)),t},e.prototype.setAttribute=function(e,t,n,r){var i=he(e);i&&i instanceof el&&(i.attributes[r?r+":"+t:t]=n),this.delegate.setAttribute(e,t,n,r)},e.prototype.removeAttribute=function(e,t,n){var r=he(e);r&&r instanceof el&&(r.attributes[n?n+":"+t:t]=null),this.delegate.removeAttribute(e,t,n)},e.prototype.addClass=function(e,t){var n=he(e);n&&n instanceof el&&(n.classes[t]=!0),this.delegate.addClass(e,t)},e.prototype.removeClass=function(e,t){var n=he(e);n&&n instanceof el&&(n.classes[t]=!1),this.delegate.removeClass(e,t)},e.prototype.setStyle=function(e,t,n,r){var i=he(e);i&&i instanceof el&&(i.styles[t]=n),this.delegate.setStyle(e,t,n,r)},e.prototype.removeStyle=function(e,t,n){var r=he(e);r&&r instanceof el&&(r.styles[t]=null),this.delegate.removeStyle(e,t,n)},e.prototype.setProperty=function(e,t,n){var r=he(e);r&&r instanceof el&&(r.properties[t]=n),this.delegate.setProperty(e,t,n)},e.prototype.listen=function(e,t,n){if("string"!=typeof e){var r=he(e);r&&r.listeners.push(new function(e,t){this.name=e,this.callback=t}(t,n))}return this.delegate.listen(e,t,n)},e.prototype.parentNode=function(e){return this.delegate.parentNode(e)},e.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},e.prototype.setValue=function(e,t){return this.delegate.setValue(e,t)},e}(),fa=function(e){function t(t,n,r){var i=e.call(this)||this;return i.moduleType=t,i._bootstrapComponents=n,i._ngModuleDefFactory=r,i}return Object(Tr.__extends)(t,e),t.prototype.create=function(e){kn();var t=Xe(this._ngModuleDefFactory);return kl.createNgModuleRef(this.moduleType,e||yi.NULL,this._bootstrapComponents,t)},t}(mo),ha="*"}.call(t,n("fRUx"))},LaOa:function(e,t,n){"use strict";t.a=function(e,t){return function(n){return n.lift(new o(e,t))}};var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.predicate,this.thisArg))},e}(),l=function(e){function t(t,n,r){e.call(this,t),this.predicate=n,this.thisArg=r,this.count=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},t}(i.a)},Lcie:function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},MwgA:function(e,t){e.exports=function(){throw new Error("define cannot be used indirect")}},NGRF:function(e,t,n){"use strict";t.a=function(e){return null!=e&&"object"==typeof e}},NePw:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={e:{}}},Oryw:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("6Xbx"),i=n("AP4T"),o=n("8Ut3"),l=n("Ecq+"),a=n("3iOE"),s=function(e){function t(t,n){e.call(this),this.array=t,this.scheduler=n,n||1!==t.length||(this._isScalar=!0,this.value=t[0])}return Object(r.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.of=function(){for(var e=[],n=0;n<arguments.length;n++)e[n-0]=arguments[n];var r=e[e.length-1];Object(a.a)(r)?e.pop():r=null;var i=e.length;return i>1?new t(e,r):1===i?new o.a(e[0],r):new l.a(r)},t.dispatch=function(e){var t=e.array,n=e.index,r=e.subscriber;n>=e.count?r.complete():(r.next(t[n]),r.closed||(e.index=n+1,this.schedule(e)))},t.prototype._subscribe=function(e){var n=this.array,r=n.length,i=this.scheduler;if(i)return i.schedule(t.dispatch,0,{array:n,index:0,count:r,subscriber:e});for(var o=0;o<r&&!e.closed;o++)e.next(n[o]);e.complete()},t}(i.a)},P0cP:function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=function(){function e(){}return e.prototype.equals=function(e,t,n){return n?this.resolveFieldData(e,n)===this.resolveFieldData(t,n):this.equalsByValue(e,t)},e.prototype.equalsByValue=function(e,t){if(null==e&&null==t)return!0;if(null==e||null==t)return!1;if(e==t)return delete e._$visited,!0;if("object"==typeof e&&"object"==typeof t){e._$visited=!0;for(var n in e)if("_$visited"!==n){if(e.hasOwnProperty(n)!==t.hasOwnProperty(n))return!1;switch(typeof e[n]){case"object":if(e[n]&&e[n]._$visited||!this.equals(e[n],t[n]))return!1;break;case"function":if(void 0===t[n]||"compare"!=n&&e[n].toString()!=t[n].toString())return!1;break;default:if(e[n]!=t[n])return!1}}for(var n in t)if(void 0===e[n])return!1;return delete e._$visited,!0}return!1},e.prototype.resolveFieldData=function(e,t){if(e&&t){if(-1==t.indexOf("."))return e[t];for(var n=t.split("."),r=e,i=0,o=n.length;i<o;++i){if(null==r)return null;r=r[n[i]]}return r}return null},e.prototype.filter=function(e,t,n){var r=[];if(e)for(var i=0,o=e;i<o.length;i++)for(var l=o[i],a=0,s=t;a<s.length;a++){var u=s[a];if(String(this.resolveFieldData(l,u)).toLowerCase().indexOf(n.toLowerCase())>-1){r.push(l);break}}return r},e.prototype.reorderArray=function(e,t,n){var r;if(e&&t!==n){if(n>=e.length)for(r=n-e.length;1+r--;)e.push(void 0);e.splice(n,0,e.splice(t,1)[0])}},e.prototype.generateSelectItems=function(e,t){var n;if(e&&e.length){n=[];for(var r=0,i=e;r<i.length;r++){var o=i[r];n.push({label:this.resolveFieldData(o,t),value:o})}}return n},e}();o=r([i.Injectable()],o),t.ObjectUtils=o},P6IN:function(e,t,n){var r=n("tose").f,i=n("rMsi"),o=n("3r0D")("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},PAZ8:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("AP4T"),i=function(){function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue="N"===e}return e.prototype.observe=function(e){switch(this.kind){case"N":return e.next&&e.next(this.value);case"E":return e.error&&e.error(this.error);case"C":return e.complete&&e.complete()}},e.prototype.do=function(e,t,n){switch(this.kind){case"N":return e&&e(this.value);case"E":return t&&t(this.error);case"C":return n&&n()}},e.prototype.accept=function(e,t,n){return e&&"function"==typeof e.next?this.observe(e):this.do(e,t,n)},e.prototype.toObservable=function(){switch(this.kind){case"N":return r.a.of(this.value);case"E":return r.a.throw(this.error);case"C":return r.a.empty()}throw new Error("unexpected notification kind value")},e.createNext=function(t){return void 0!==t?new e("N",t):e.undefinedValueNotification},e.createError=function(t){return new e("E",void 0,t)},e.createComplete=function(){return e.completeNotification},e.completeNotification=new e("C"),e.undefinedValueNotification=new e("N",void 0),e}()},"PR+T":function(e,t,n){"use strict";t.a=function(){}},Ps07:function(e,t,n){"use strict";var r=n("3LDD"),i=n("Y5fy");e.exports=n("cpZ/")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(i(this,"Set"),e=0===e?0:e,e)}},r)},QZhw:function(e,t,n){"use strict";var r,i=n("BCYq")(0),o=n("lfBE"),l=n("xI8H"),a=n("rIdM"),s=n("XRS9"),u=n("JXkd"),c=n("umMR"),d=n("Y5fy"),p=l.getWeak,f=Object.isExtensible,h=s.ufstore,m={},g=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(e){if(u(e)){var t=p(e);return!0===t?h(d(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return s.def(d(this,"WeakMap"),e,t)}},v=e.exports=n("cpZ/")("WeakMap",g,y,s,!0,!0);c(function(){return 7!=(new v).set((Object.freeze||Object)(m),7).get(m)})&&(a((r=s.getConstructor(g,"WeakMap")).prototype,y),l.NEED=!0,i(["delete","has","get","set"],function(e){var t=v.prototype,n=t[e];o(t,e,function(t,i){if(u(t)&&!f(t)){this._f||(this._f=new r);var o=this._f[e](t,i);return"set"==e?this:o}return n.call(this,t,i)})}))},QhpF:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata,o=n("6Xbx").__param;Object.defineProperty(t,"__esModule",{value:!0});var l=n("LMZF"),a=n("LMZF"),s=n("Un6q"),u=n("/zAi"),c=n("/zAi"),d=(n("H0Ur"),function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.node})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}());r([l.Input(),i("design:type",Object)],d.prototype,"node",void 0),r([l.Input(),i("design:type",l.TemplateRef)],d.prototype,"template",void 0),d=r([l.Component({selector:"p-treeNodeTemplateLoader",template:""})],d),t.TreeNodeTemplateLoader=d;var p=m=function(){function e(e){this.tree=e}return e.prototype.ngOnInit=function(){this.node.parent=this.parentNode},e.prototype.getIcon=function(){var e;return e=this.node.icon?this.node.icon:this.node.expanded&&this.node.children&&this.node.children.length?this.node.expandedIcon:this.node.collapsedIcon,m.ICON_CLASS+" "+e},e.prototype.isLeaf=function(){return 0!=this.node.leaf&&!(this.node.children&&this.node.children.length)},e.prototype.toggle=function(e){this.node.expanded?this.tree.onNodeCollapse.emit({originalEvent:e,node:this.node}):this.tree.onNodeExpand.emit({originalEvent:e,node:this.node}),this.node.expanded=!this.node.expanded},e.prototype.onNodeClick=function(e){this.tree.onNodeClick(e,this.node)},e.prototype.onNodeTouchEnd=function(){this.tree.onNodeTouchEnd()},e.prototype.onNodeRightClick=function(e){this.tree.onNodeRightClick(e,this.node)},e.prototype.isSelected=function(){return this.tree.isSelected(this.node)},e.prototype.onDropPoint=function(e,t){e.preventDefault();var n=this.tree.dragNode,r=this.tree.dragNodeIndex,i=this.tree.dragNodeTree!==this.tree||1===t||r!==this.index-1;if(this.tree.allowDrop(n,this.node,this.tree.dragNodeScope)&&i){var o=this.node.parent?this.node.parent.children:this.tree.value;this.tree.dragNodeSubNodes.splice(r,1);var l=this.index;t<0?o.splice(l=this.tree.dragNodeSubNodes===o?this.tree.dragNodeIndex>this.index?this.index:this.index-1:this.index,0,n):(l=o.length,o.push(n)),this.tree.dragDropService.stopDrag({node:n,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:r}),this.tree.onNodeDrop.emit({originalEvent:e,dragNode:n,dropNode:this.node,dropIndex:l})}this.draghoverPrev=!1,this.draghoverNext=!1},e.prototype.onDropPointDragOver=function(e){e.dataTransfer.dropEffect="move",e.preventDefault()},e.prototype.onDropPointDragEnter=function(e,t){this.tree.allowDrop(this.tree.dragNode,this.node,this.tree.dragNodeScope)&&(t<0?this.draghoverPrev=!0:this.draghoverNext=!0)},e.prototype.onDropPointDragLeave=function(e){this.draghoverPrev=!1,this.draghoverNext=!1},e.prototype.onDragStart=function(e){this.tree.draggableNodes&&!1!==this.node.draggable?(e.dataTransfer.setData("text","data"),this.tree.dragDropService.startDrag({tree:this,node:this.node,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:this.index,scope:this.tree.draggableScope})):e.preventDefault()},e.prototype.onDragStop=function(e){this.tree.dragDropService.stopDrag({node:this.node,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:this.index})},e.prototype.onDropNodeDragOver=function(e){e.dataTransfer.dropEffect="move",this.tree.droppableNodes&&(e.preventDefault(),e.stopPropagation())},e.prototype.onDropNode=function(e){if(this.tree.droppableNodes&&!1!==this.node.droppable){e.preventDefault(),e.stopPropagation();var t=this.tree.dragNode;this.tree.allowDrop(t,this.node,this.tree.dragNodeScope)&&(this.tree.dragNodeSubNodes.splice(this.tree.dragNodeIndex,1),this.node.children?this.node.children.push(t):this.node.children=[t],this.tree.dragDropService.stopDrag({node:t,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:this.tree.dragNodeIndex}),this.tree.onNodeDrop.emit({originalEvent:e,dragNode:t,dropNode:this.node,index:this.index}))}this.draghoverNode=!1},e.prototype.onDropNodeDragEnter=function(e){this.tree.droppableNodes&&!1!==this.node.droppable&&this.tree.allowDrop(this.tree.dragNode,this.node,this.tree.dragNodeScope)&&(this.draghoverNode=!0)},e.prototype.onDropNodeDragLeave=function(e){if(this.tree.droppableNodes){var t=e.currentTarget.getBoundingClientRect();(e.x>t.left+t.width||e.x<t.left||e.y>=Math.floor(t.top+t.height)||e.y<t.top)&&(this.draghoverNode=!1)}},e}();p.ICON_CLASS="ui-treenode-icon fa fa-fw",r([l.Input(),i("design:type",Object)],p.prototype,"node",void 0),r([l.Input(),i("design:type",Object)],p.prototype,"parentNode",void 0),r([l.Input(),i("design:type",Boolean)],p.prototype,"root",void 0),r([l.Input(),i("design:type",Number)],p.prototype,"index",void 0),r([l.Input(),i("design:type",Boolean)],p.prototype,"firstChild",void 0),r([l.Input(),i("design:type",Boolean)],p.prototype,"lastChild",void 0),p=m=r([l.Component({selector:"p-treeNode",template:'\n        <ng-template [ngIf]="node">\n            <li *ngIf="tree.droppableNodes" class="ui-treenode-droppoint" [ngClass]="{\'ui-treenode-droppoint-active ui-state-highlight\':draghoverPrev}"\n            (drop)="onDropPoint($event,-1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,-1)" (dragleave)="onDropPointDragLeave($event)"></li>\n            <li *ngIf="!tree.horizontal" [ngClass]="[\'ui-treenode\',node.styleClass||\'\', isLeaf() ? \'ui-treenode-leaf\': \'\']">\n                <div class="ui-treenode-content" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)" (touchend)="onNodeTouchEnd()"\n                    (drop)="onDropNode($event)" (dragover)="onDropNodeDragOver($event)" (dragenter)="onDropNodeDragEnter($event)" (dragleave)="onDropNodeDragLeave($event)"\n                    [ngClass]="{\'ui-treenode-selectable\':tree.selectionMode && node.selectable !== false,\'ui-treenode-dragover\':draghoverNode, \'ui-treenode-content-selected\':isSelected()}" [draggable]="tree.draggableNodes" (dragstart)="onDragStart($event)" (dragend)="onDragStop($event)">\n                    <span class="ui-tree-toggler  fa fa-fw" [ngClass]="{\'fa-caret-right\':!node.expanded,\'fa-caret-down\':node.expanded}"\n                            (click)="toggle($event)"></span\n                    ><div class="ui-chkbox" *ngIf="tree.selectionMode == \'checkbox\'"><div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default">\n                        <span class="ui-chkbox-icon ui-clickable fa" \n                            [ngClass]="{\'fa-check\':isSelected(),\'fa-minus\':node.partialSelected}"></span></div></div\n                    ><span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span\n                    ><span class="ui-treenode-label ui-corner-all" \n                        [ngClass]="{\'ui-state-highlight\':isSelected()}">\n                            <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>\n                            <span *ngIf="tree.getTemplateForNode(node)">\n                                <p-treeNodeTemplateLoader [node]="node" [template]="tree.getTemplateForNode(node)"></p-treeNodeTemplateLoader>\n                            </span>\n                    </span>\n                </div>\n                <ul class="ui-treenode-children" style="display: none;" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? \'block\' : \'none\'">\n                    <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; let index=index" [node]="childNode" [parentNode]="node"\n                        [firstChild]="firstChild" [lastChild]="lastChild" [index]="index"></p-treeNode>\n                </ul>\n            </li>\n            <li *ngIf="tree.droppableNodes&&lastChild" class="ui-treenode-droppoint" [ngClass]="{\'ui-treenode-droppoint-active ui-state-highlight\':draghoverNext}"\n            (drop)="onDropPoint($event,1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,1)" (dragleave)="onDropPointDragLeave($event)"></li>\n            <table *ngIf="tree.horizontal" [class]="node.styleClass">\n                <tbody>\n                    <tr>\n                        <td class="ui-treenode-connector" *ngIf="!root">\n                            <table class="ui-treenode-connector-table">\n                                <tbody>\n                                    <tr>\n                                        <td [ngClass]="{\'ui-treenode-connector-line\':!firstChild}"></td>\n                                    </tr>\n                                    <tr>\n                                        <td [ngClass]="{\'ui-treenode-connector-line\':!lastChild}"></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </td>\n                        <td class="ui-treenode" [ngClass]="{\'ui-treenode-collapsed\':!node.expanded}">\n                            <div class="ui-treenode-content ui-state-default ui-corner-all" \n                                [ngClass]="{\'ui-treenode-selectable\':tree.selectionMode,\'ui-state-highlight\':isSelected()}" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)"\n                                (touchend)="onNodeTouchEnd()">\n                                <span class="ui-tree-toggler fa fa-fw" [ngClass]="{\'fa-plus\':!node.expanded,\'fa-minus\':node.expanded}" *ngIf="!isLeaf()"\n                                        (click)="toggle($event)"></span\n                                ><span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span\n                                ><span class="ui-treenode-label ui-corner-all">\n                                        <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>\n                                        <span *ngIf="tree.getTemplateForNode(node)">\n                                            <p-treeNodeTemplateLoader [node]="node" [template]="tree.getTemplateForNode(node)"></p-treeNodeTemplateLoader>\n                                        </span>\n                                </span>\n                            </div>\n                        </td>\n                        <td class="ui-treenode-children-container" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? \'table-cell\' : \'none\'">\n                            <div class="ui-treenode-children">\n                                <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last;" [node]="childNode" \n                                        [firstChild]="firstChild" [lastChild]="lastChild"></p-treeNode>\n                            </div>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </ng-template>\n    '}),o(0,l.Inject(l.forwardRef(function(){return f})))],p),t.UITreeNode=p;var f=function(){function e(e){this.dragDropService=e,this.selectionChange=new l.EventEmitter,this.onNodeSelect=new l.EventEmitter,this.onNodeUnselect=new l.EventEmitter,this.onNodeExpand=new l.EventEmitter,this.onNodeCollapse=new l.EventEmitter,this.onNodeContextMenuSelect=new l.EventEmitter,this.onNodeDrop=new l.EventEmitter,this.layout="vertical",this.metaKeySelection=!0,this.propagateSelectionUp=!0,this.propagateSelectionDown=!0,this.loadingIcon="fa-circle-o-notch"}return e.prototype.ngOnInit=function(){var e=this;this.droppableNodes&&(this.dragStartSubscription=this.dragDropService.dragStart$.subscribe(function(t){e.dragNodeTree=t.tree,e.dragNode=t.node,e.dragNodeSubNodes=t.subNodes,e.dragNodeIndex=t.index,e.dragNodeScope=t.scope}),this.dragStopSubscription=this.dragDropService.dragStop$.subscribe(function(t){e.dragNodeTree=null,e.dragNode=null,e.dragNodeSubNodes=null,e.dragNodeIndex=null,e.dragNodeScope=null,e.dragHover=!1}))},Object.defineProperty(e.prototype,"horizontal",{get:function(){return"horizontal"==this.layout},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){var e=this;this.templates.length&&(this.templateMap={}),this.templates.forEach(function(t){e.templateMap[t.name]=t.template})},e.prototype.onNodeClick=function(e,t){var n=e.target;if(!n.className||0!==n.className.indexOf("ui-tree-toggler")){if(this.selectionMode){if(!1===t.selectable)return;var r=this.findIndexInSelection(t),i=r>=0;if(this.isCheckboxSelectionMode())i?(this.propagateSelectionDown?this.propagateDown(t,!1):this.selection=this.selection.filter(function(e,t){return t!=r}),this.propagateSelectionUp&&t.parent&&this.propagateUp(t.parent,!1),this.selectionChange.emit(this.selection),this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.propagateSelectionDown?this.propagateDown(t,!0):this.selection=(this.selection||[]).concat([t]),this.propagateSelectionUp&&t.parent&&this.propagateUp(t.parent,!0),this.selectionChange.emit(this.selection),this.onNodeSelect.emit({originalEvent:e,node:t}));else if(!this.nodeTouched&&this.metaKeySelection){var o=e.metaKey||e.ctrlKey;i&&o?(this.isSingleSelectionMode()?this.selectionChange.emit(null):(this.selection=this.selection.filter(function(e,t){return t!=r}),this.selectionChange.emit(this.selection)),this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.isSingleSelectionMode()?this.selectionChange.emit(t):this.isMultipleSelectionMode()&&(this.selection=o?this.selection||[]:[],this.selection=this.selection.concat([t]),this.selectionChange.emit(this.selection)),this.onNodeSelect.emit({originalEvent:e,node:t}))}else this.isSingleSelectionMode()?i?(this.selection=null,this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.selection=t,this.onNodeSelect.emit({originalEvent:e,node:t})):i?(this.selection=this.selection.filter(function(e,t){return t!=r}),this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.selection=(this.selection||[]).concat([t]),this.onNodeSelect.emit({originalEvent:e,node:t})),this.selectionChange.emit(this.selection)}this.nodeTouched=!1}},e.prototype.onNodeTouchEnd=function(){this.nodeTouched=!0},e.prototype.onNodeRightClick=function(e,t){if(this.contextMenu){var n=e.target;if(n.className&&0===n.className.indexOf("ui-tree-toggler"))return;this.findIndexInSelection(t)>=0||(this.isSingleSelectionMode()?this.selectionChange.emit(t):this.selectionChange.emit([t])),this.contextMenu.show(e),this.onNodeContextMenuSelect.emit({originalEvent:e,node:t})}},e.prototype.findIndexInSelection=function(e){var t=-1;if(this.selectionMode&&this.selection)if(this.isSingleSelectionMode())t=this.selection==e?0:-1;else for(var n=0;n<this.selection.length;n++)if(this.selection[n]==e){t=n;break}return t},e.prototype.propagateUp=function(e,t){if(e.children&&e.children.length){for(var n=0,r=!1,i=0,o=e.children;i<o.length;i++){var l=o[i];this.isSelected(l)?n++:l.partialSelected&&(r=!0)}if(t&&n==e.children.length)this.selection=(this.selection||[]).concat([e]),e.partialSelected=!1;else{if(!t){var a=this.findIndexInSelection(e);a>=0&&(this.selection=this.selection.filter(function(e,t){return t!=a}))}e.partialSelected=!!(r||n>0&&n!=e.children.length)}}var s=e.parent;s&&this.propagateUp(s,t)},e.prototype.propagateDown=function(e,t){var n=this.findIndexInSelection(e);if(t&&-1==n?this.selection=(this.selection||[]).concat([e]):!t&&n>-1&&(this.selection=this.selection.filter(function(e,t){return t!=n})),e.partialSelected=!1,e.children&&e.children.length)for(var r=0,i=e.children;r<i.length;r++)this.propagateDown(i[r],t)},e.prototype.isSelected=function(e){return-1!=this.findIndexInSelection(e)},e.prototype.isSingleSelectionMode=function(){return this.selectionMode&&"single"==this.selectionMode},e.prototype.isMultipleSelectionMode=function(){return this.selectionMode&&"multiple"==this.selectionMode},e.prototype.isCheckboxSelectionMode=function(){return this.selectionMode&&"checkbox"==this.selectionMode},e.prototype.getTemplateForNode=function(e){return this.templateMap?e.type?this.templateMap[e.type]:this.templateMap.default:null},e.prototype.onDragOver=function(e){!this.droppableNodes||this.value&&0!==this.value.length||(e.dataTransfer.dropEffect="move",e.preventDefault())},e.prototype.onDrop=function(e){if(this.droppableNodes&&(!this.value||0===this.value.length)){e.preventDefault();var t=this.dragNode;this.allowDrop(t,null,this.dragNodeScope)&&(this.dragNodeSubNodes.splice(this.dragNodeIndex,1),this.value=this.value||[],this.value.push(t),this.dragDropService.stopDrag({node:t}))}},e.prototype.onDragEnter=function(e){this.droppableNodes&&this.allowDrop(this.dragNode,null,this.dragNodeScope)&&(this.dragHover=!0)},e.prototype.onDragLeave=function(e){if(this.droppableNodes){var t=e.currentTarget.getBoundingClientRect();(e.x>t.left+t.width||e.x<t.left||e.y>t.top+t.height||e.y<t.top)&&(this.dragHover=!1)}},e.prototype.allowDrop=function(e,t,n){if(this.isValidDragScope(n)){var r=!0;if(t)if(e===t)r=!1;else for(var i=t.parent;null!=i;){if(i===e){r=!1;break}i=i.parent}return r}return!1},e.prototype.isValidDragScope=function(e){var t=this.droppableScope;if(t){if("string"==typeof t){if("string"==typeof e)return t===e;if(e instanceof Array)return-1!=e.indexOf(t)}else if(t instanceof Array){if("string"==typeof e)return-1!=t.indexOf(e);if(e instanceof Array)for(var n=0,r=t;n<r.length;n++)for(var i=r[n],o=0,l=e;o<l.length;o++)if(i===l[o])return!0}return!1}return!0},e.prototype.ngOnDestroy=function(){this.dragStartSubscription&&this.dragStartSubscription.unsubscribe(),this.dragStopSubscription&&this.dragStopSubscription.unsubscribe()},e}();r([l.Input(),i("design:type",Array)],f.prototype,"value",void 0),r([l.Input(),i("design:type",String)],f.prototype,"selectionMode",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"selection",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"selectionChange",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeSelect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeUnselect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeExpand",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeCollapse",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeContextMenuSelect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeDrop",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"style",void 0),r([l.Input(),i("design:type",String)],f.prototype,"styleClass",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"contextMenu",void 0),r([l.Input(),i("design:type",String)],f.prototype,"layout",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"draggableScope",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"droppableScope",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"draggableNodes",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"droppableNodes",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"metaKeySelection",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"propagateSelectionUp",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"propagateSelectionDown",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"loading",void 0),r([l.Input(),i("design:type",String)],f.prototype,"loadingIcon",void 0),r([l.ContentChildren(c.PrimeTemplate),i("design:type",l.QueryList)],f.prototype,"templates",void 0),f=r([l.Component({selector:"p-tree",template:'\n        <div [ngClass]="{\'ui-tree ui-widget ui-widget-content ui-corner-all\':true,\'ui-tree-selectable\':selectionMode,\'ui-treenode-dragover\':dragHover,\'ui-tree-loading\': loading}" [ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"\n            (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)">\n            <div class="ui-tree-loading-mask ui-widget-overlay" *ngIf="loading"></div>\n            <div class="ui-tree-loading-content" *ngIf="loading">\n                <i [class]="\'fa fa-spin fa-2x \' + loadingIcon"></i>\n            </div>\n            <ul class="ui-tree-container">\n                <p-treeNode *ngFor="let node of value;let firstChild=first;let lastChild=last; let index=index" [node]="node" \n                [firstChild]="firstChild" [lastChild]="lastChild" [index]="index"></p-treeNode>\n            </ul>\n        </div>\n        <div [ngClass]="{\'ui-tree ui-tree-horizontal ui-widget ui-widget-content ui-corner-all\':true,\'ui-tree-selectable\':selectionMode}"  [ngStyle]="style" [class]="styleClass" *ngIf="horizontal">\n            <div class="ui-tree-loading ui-widget-overlay" *ngIf="loading"></div>\n            <div class="ui-tree-loading-content" *ngIf="loading">\n                <i [class]="\'fa fa-spin fa-2x \' + loadingIcon"></i>\n            </div>\n            <table *ngIf="value&&value[0]">\n                <p-treeNode [node]="value[0]" [root]="true"></p-treeNode>\n            </table>\n        </div>\n    '}),o(0,a.Optional())],f),t.Tree=f;var h=function(){};h=r([l.NgModule({imports:[s.CommonModule],exports:[f,u.SharedModule],declarations:[f,p,d]})],h),t.TreeModule=h;var m},R5c1:function(e,t,n){var r=n("rMsi"),i=n("+GRi"),o=n("vyV2")(!1),l=n("yIWP")("IE_PROTO");e.exports=function(e,t){var n,a=i(e),s=0,u=[];for(n in a)n!=l&&r(a,n)&&u.push(n);for(;t.length>s;)r(a,n=t[s++])&&(~o(u,n)||u.push(n));return u}},RT4T:function(e,t,n){var r=n("Wy9r");e.exports=function(e){return Object(r(e))}},Rs3a:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("Un6q"),a=n("0nO6"),s=n("wRXj"),u=function(){function e(){this.pageLinkSize=5,this.onPageChange=new o.EventEmitter,this.alwaysShow=!0,this._totalRecords=0,this._first=0,this._rows=0}return Object.defineProperty(e.prototype,"totalRecords",{get:function(){return this._totalRecords},set:function(e){this._totalRecords=e,this.updatePageLinks()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._first},set:function(e){this._first=e,this.updatePageLinks()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rows",{get:function(){return this._rows},set:function(e){this._rows=e,this.updatePageLinks()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowsPerPageOptions",{get:function(){return this._rowsPerPageOptions},set:function(e){if(this._rowsPerPageOptions=e,this._rowsPerPageOptions){this.rowsPerPageItems=[];for(var t=0,n=this._rowsPerPageOptions;t<n.length;t++){var r=n[t];this.rowsPerPageItems.push({label:String(r),value:r})}}},enumerable:!0,configurable:!0}),e.prototype.isFirstPage=function(){return 0===this.getPage()},e.prototype.isLastPage=function(){return this.getPage()===this.getPageCount()-1},e.prototype.getPageCount=function(){return Math.ceil(this.totalRecords/this.rows)||1},e.prototype.calculatePageLinkBoundaries=function(){var e=this.getPageCount(),t=Math.min(this.pageLinkSize,e),n=Math.max(0,Math.ceil(this.getPage()-t/2)),r=Math.min(e-1,n+t-1),i=this.pageLinkSize-(r-n+1);return n=Math.max(0,n-i),[n,r]},e.prototype.updatePageLinks=function(){this.pageLinks=[];for(var e=this.calculatePageLinkBoundaries(),t=e[1],n=e[0];n<=t;n++)this.pageLinks.push(n+1)},e.prototype.changePage=function(e){var t=this.getPageCount();if(e>=0&&e<t){this.first=this.rows*e;var n={page:e,first:this.first,rows:this.rows,pageCount:t};this.updatePageLinks(),this.onPageChange.emit(n)}},e.prototype.getPage=function(){return Math.floor(this.first/this.rows)},e.prototype.changePageToFirst=function(e){this.isFirstPage()||this.changePage(0),e.preventDefault()},e.prototype.changePageToPrev=function(e){this.changePage(this.getPage()-1),e.preventDefault()},e.prototype.changePageToNext=function(e){this.changePage(this.getPage()+1),e.preventDefault()},e.prototype.changePageToLast=function(e){this.isLastPage()||this.changePage(this.getPageCount()-1),e.preventDefault()},e.prototype.onPageLinkClick=function(e,t){this.changePage(t),e.preventDefault()},e.prototype.onRppChange=function(e){this.changePage(this.getPage())},e}();r([o.Input(),i("design:type",Number)],u.prototype,"pageLinkSize",void 0),r([o.Output(),i("design:type",o.EventEmitter)],u.prototype,"onPageChange",void 0),r([o.Input(),i("design:type",Object)],u.prototype,"style",void 0),r([o.Input(),i("design:type",String)],u.prototype,"styleClass",void 0),r([o.Input(),i("design:type",Boolean)],u.prototype,"alwaysShow",void 0),r([o.Input(),i("design:type",Number),i("design:paramtypes",[Number])],u.prototype,"totalRecords",null),r([o.Input(),i("design:type",Number),i("design:paramtypes",[Number])],u.prototype,"first",null),r([o.Input(),i("design:type",Number),i("design:paramtypes",[Number])],u.prototype,"rows",null),r([o.Input(),i("design:type",Array),i("design:paramtypes",[Array])],u.prototype,"rowsPerPageOptions",null),u=r([o.Component({selector:"p-paginator",template:'\n        <div [class]="styleClass" [ngStyle]="style" [ngClass]="\'ui-paginator ui-widget ui-widget-header ui-unselectable-text\'"\n            *ngIf="alwaysShow ? true : (pageLinks && pageLinks.length > 1)">\n            <a href="#" class="ui-paginator-first ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToFirst($event)" [ngClass]="{\'ui-state-disabled\':isFirstPage()}" [tabindex]="isFirstPage() ? -1 : null">\n                <span class="fa fa-step-backward"></span>\n            </a>\n            <a href="#" class="ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToPrev($event)" [ngClass]="{\'ui-state-disabled\':isFirstPage()}" [tabindex]="isFirstPage() ? -1 : null">\n                <span class="fa fa-backward"></span>\n            </a>\n            <span class="ui-paginator-pages">\n                <a href="#" *ngFor="let pageLink of pageLinks" class="ui-paginator-page ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="onPageLinkClick($event, pageLink - 1)" [ngClass]="{\'ui-state-active\': (pageLink-1 == getPage())}">{{pageLink}}</a>\n            </span>\n            <a href="#" class="ui-paginator-next ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToNext($event)" [ngClass]="{\'ui-state-disabled\':isLastPage()}" [tabindex]="isLastPage() ? -1 : null">\n                <span class="fa fa-forward"></span>\n            </a>\n            <a href="#" class="ui-paginator-last ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToLast($event)" [ngClass]="{\'ui-state-disabled\':isLastPage()}" [tabindex]="isLastPage() ? -1 : null">\n                <span class="fa fa-step-forward"></span>\n            </a>\n            <p-dropdown [options]="rowsPerPageItems" [(ngModel)]="rows" *ngIf="rowsPerPageOptions" \n                (onChange)="onRppChange($event)" [lazy]="false" [autoWidth]="false"></p-dropdown>\n        </div>\n    '})],u),t.Paginator=u;var c=function(){};c=r([o.NgModule({imports:[l.CommonModule,s.DropdownModule,a.FormsModule],exports:[u,s.DropdownModule,a.FormsModule],declarations:[u]})],c),t.PaginatorModule=c},RyBE:function(e,t,n){"use strict";function r(){return x}function i(){return!!window.history.pushState}function o(e,t){"undefined"!=typeof COMPILED&&COMPILED||((_["\u0275global"].ng=_["\u0275global"].ng||{})[e]=t)}function l(e){return Object(_.getDebugNode)(e)}function a(e){return o(j,l),o(V,Object(w.__assign)({},F,(e||[]).reduce(function(e,t){return e[t.name]=t.token,e},{}))),function(){return l}}function s(e,t,n){for(var r=0;r<t.length;r++){var i=t[r];Array.isArray(i)?s(e,i,n):(i=i.replace(G,e),n.push(i))}return n}function u(e){return function(t){!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}function c(e,t){if(e.charCodeAt(0)===Y)throw new Error("Found the synthetic "+t+" "+e+'. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.')}function d(e){return(e=String(e)).match(ye)||e.match(ve)?e:(Object(_.isDevMode)()&&r().log("WARNING: sanitizing unsafe URL value "+e+" (see http://g.co/ng/security#xss)"),"unsafe:"+e)}function p(e){for(var t={},n=0,r=e.split(",");n<r.length;n++)t[r[n]]=!0;return t}function f(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n={},r=0,i=e;r<i.length;r++){var o=i[r];for(var l in o)o.hasOwnProperty(l)&&(n[l]=!0)}return n}function h(e,t){if(t&&_e.contains(e,t))throw new Error("Failed to sanitize html because the element is clobbered: "+_e.getOuterHTML(e));return t}function m(e){return e.replace(/&/g,"&amp;").replace(Ie,function(e){return"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";"}).replace(Re,function(e){return"&#"+e.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function g(e){_e.attributeMap(e).forEach(function(t,n){"xmlns:ns1"!==n&&0!==n.indexOf("ns1:")||_e.removeAttribute(e,n)});for(var t=0,n=_e.childNodesAsList(e);t<n.length;t++){var r=n[t];_e.isElementNode(r)&&g(r)}}function y(){return new _.ErrorHandler}n.d(t,"a",function(){return qe}),n.d(t,"j",function(){return We}),n.d(t,"h",function(){return M}),n.d(t,"i",function(){return L}),n.d(t,"b",function(){return I}),n.d(t,"d",function(){return z}),n.d(t,"e",function(){return B}),n.d(t,"f",function(){return de}),n.d(t,"g",function(){return pe}),n.d(t,"c",function(){return Ne}),n.d(t,"s",function(){return r}),n.d(t,"l",function(){return Z}),n.d(t,"k",function(){return ue}),n.d(t,"n",function(){return fe}),n.d(t,"o",function(){return ge}),n.d(t,"m",function(){return q}),n.d(t,"p",function(){return W}),n.d(t,"q",function(){return y}),n.d(t,"t",function(){return a}),n.d(t,"r",function(){return Ae});var v,b=n("Un6q"),_=n("LMZF"),w=n("6Xbx"),x=null,C={class:"className",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"},E={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},S={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"};_["\u0275global"].Node&&(v=_["\u0275global"].Node.prototype.contains||function(e){return!!(16&this.compareDocumentPosition(e))});var O,T,k=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.parse=function(e){throw new Error("parse not implemented")},t.makeCurrent=function(){!function(e){x||(x=e)}(new t)},t.prototype.hasProperty=function(e,t){return t in e},t.prototype.setProperty=function(e,t,n){e[t]=n},t.prototype.getProperty=function(e,t){return e[t]},t.prototype.invoke=function(e,t,n){(r=e)[t].apply(r,n);var r},t.prototype.logError=function(e){window.console&&(console.error?console.error(e):console.log(e))},t.prototype.log=function(e){window.console&&window.console.log&&window.console.log(e)},t.prototype.logGroup=function(e){window.console&&window.console.group&&window.console.group(e)},t.prototype.logGroupEnd=function(){window.console&&window.console.groupEnd&&window.console.groupEnd()},Object.defineProperty(t.prototype,"attrToPropMap",{get:function(){return C},enumerable:!0,configurable:!0}),t.prototype.contains=function(e,t){return v.call(e,t)},t.prototype.querySelector=function(e,t){return e.querySelector(t)},t.prototype.querySelectorAll=function(e,t){return e.querySelectorAll(t)},t.prototype.on=function(e,t,n){e.addEventListener(t,n,!1)},t.prototype.onAndCancel=function(e,t,n){return e.addEventListener(t,n,!1),function(){e.removeEventListener(t,n,!1)}},t.prototype.dispatchEvent=function(e,t){e.dispatchEvent(t)},t.prototype.createMouseEvent=function(e){var t=this.getDefaultDocument().createEvent("MouseEvent");return t.initEvent(e,!0,!0),t},t.prototype.createEvent=function(e){var t=this.getDefaultDocument().createEvent("Event");return t.initEvent(e,!0,!0),t},t.prototype.preventDefault=function(e){e.preventDefault(),e.returnValue=!1},t.prototype.isPrevented=function(e){return e.defaultPrevented||null!=e.returnValue&&!e.returnValue},t.prototype.getInnerHTML=function(e){return e.innerHTML},t.prototype.getTemplateContent=function(e){return"content"in e&&this.isTemplateElement(e)?e.content:null},t.prototype.getOuterHTML=function(e){return e.outerHTML},t.prototype.nodeName=function(e){return e.nodeName},t.prototype.nodeValue=function(e){return e.nodeValue},t.prototype.type=function(e){return e.type},t.prototype.content=function(e){return this.hasProperty(e,"content")?e.content:e},t.prototype.firstChild=function(e){return e.firstChild},t.prototype.nextSibling=function(e){return e.nextSibling},t.prototype.parentElement=function(e){return e.parentNode},t.prototype.childNodes=function(e){return e.childNodes},t.prototype.childNodesAsList=function(e){for(var t=e.childNodes,n=new Array(t.length),r=0;r<t.length;r++)n[r]=t[r];return n},t.prototype.clearNodes=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},t.prototype.appendChild=function(e,t){e.appendChild(t)},t.prototype.removeChild=function(e,t){e.removeChild(t)},t.prototype.replaceChild=function(e,t,n){e.replaceChild(t,n)},t.prototype.remove=function(e){return e.parentNode&&e.parentNode.removeChild(e),e},t.prototype.insertBefore=function(e,t,n){e.insertBefore(n,t)},t.prototype.insertAllBefore=function(e,t,n){n.forEach(function(n){return e.insertBefore(n,t)})},t.prototype.insertAfter=function(e,t,n){e.insertBefore(n,t.nextSibling)},t.prototype.setInnerHTML=function(e,t){e.innerHTML=t},t.prototype.getText=function(e){return e.textContent},t.prototype.setText=function(e,t){e.textContent=t},t.prototype.getValue=function(e){return e.value},t.prototype.setValue=function(e,t){e.value=t},t.prototype.getChecked=function(e){return e.checked},t.prototype.setChecked=function(e,t){e.checked=t},t.prototype.createComment=function(e){return this.getDefaultDocument().createComment(e)},t.prototype.createTemplate=function(e){var t=this.getDefaultDocument().createElement("template");return t.innerHTML=e,t},t.prototype.createElement=function(e,t){return(t=t||this.getDefaultDocument()).createElement(e)},t.prototype.createElementNS=function(e,t,n){return(n=n||this.getDefaultDocument()).createElementNS(e,t)},t.prototype.createTextNode=function(e,t){return(t=t||this.getDefaultDocument()).createTextNode(e)},t.prototype.createScriptTag=function(e,t,n){var r=(n=n||this.getDefaultDocument()).createElement("SCRIPT");return r.setAttribute(e,t),r},t.prototype.createStyleElement=function(e,t){var n=(t=t||this.getDefaultDocument()).createElement("style");return this.appendChild(n,this.createTextNode(e,t)),n},t.prototype.createShadowRoot=function(e){return e.createShadowRoot()},t.prototype.getShadowRoot=function(e){return e.shadowRoot},t.prototype.getHost=function(e){return e.host},t.prototype.clone=function(e){return e.cloneNode(!0)},t.prototype.getElementsByClassName=function(e,t){return e.getElementsByClassName(t)},t.prototype.getElementsByTagName=function(e,t){return e.getElementsByTagName(t)},t.prototype.classList=function(e){return Array.prototype.slice.call(e.classList,0)},t.prototype.addClass=function(e,t){e.classList.add(t)},t.prototype.removeClass=function(e,t){e.classList.remove(t)},t.prototype.hasClass=function(e,t){return e.classList.contains(t)},t.prototype.setStyle=function(e,t,n){e.style[t]=n},t.prototype.removeStyle=function(e,t){e.style[t]=""},t.prototype.getStyle=function(e,t){return e.style[t]},t.prototype.hasStyle=function(e,t,n){var r=this.getStyle(e,t)||"";return n?r==n:r.length>0},t.prototype.tagName=function(e){return e.tagName},t.prototype.attributeMap=function(e){for(var t=new Map,n=e.attributes,r=0;r<n.length;r++){var i=n.item(r);t.set(i.name,i.value)}return t},t.prototype.hasAttribute=function(e,t){return e.hasAttribute(t)},t.prototype.hasAttributeNS=function(e,t,n){return e.hasAttributeNS(t,n)},t.prototype.getAttribute=function(e,t){return e.getAttribute(t)},t.prototype.getAttributeNS=function(e,t,n){return e.getAttributeNS(t,n)},t.prototype.setAttribute=function(e,t,n){e.setAttribute(t,n)},t.prototype.setAttributeNS=function(e,t,n,r){e.setAttributeNS(t,n,r)},t.prototype.removeAttribute=function(e,t){e.removeAttribute(t)},t.prototype.removeAttributeNS=function(e,t,n){e.removeAttributeNS(t,n)},t.prototype.templateAwareRoot=function(e){return this.isTemplateElement(e)?this.content(e):e},t.prototype.createHtmlDocument=function(){return document.implementation.createHTMLDocument("fakeTitle")},t.prototype.getDefaultDocument=function(){return document},t.prototype.getBoundingClientRect=function(e){try{return e.getBoundingClientRect()}catch(e){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}},t.prototype.getTitle=function(e){return e.title},t.prototype.setTitle=function(e,t){e.title=t||""},t.prototype.elementMatches=function(e,t){return!!this.isElementNode(e)&&(e.matches&&e.matches(t)||e.msMatchesSelector&&e.msMatchesSelector(t)||e.webkitMatchesSelector&&e.webkitMatchesSelector(t))},t.prototype.isTemplateElement=function(e){return this.isElementNode(e)&&"TEMPLATE"===e.nodeName},t.prototype.isTextNode=function(e){return e.nodeType===Node.TEXT_NODE},t.prototype.isCommentNode=function(e){return e.nodeType===Node.COMMENT_NODE},t.prototype.isElementNode=function(e){return e.nodeType===Node.ELEMENT_NODE},t.prototype.hasShadowRoot=function(e){return null!=e.shadowRoot&&e instanceof HTMLElement},t.prototype.isShadowRoot=function(e){return e instanceof DocumentFragment},t.prototype.importIntoDoc=function(e){return document.importNode(this.templateAwareRoot(e),!0)},t.prototype.adoptNode=function(e){return document.adoptNode(e)},t.prototype.getHref=function(e){return e.getAttribute("href")},t.prototype.getEventKey=function(e){var t=e.key;if(null==t){if(null==(t=e.keyIdentifier))return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&S.hasOwnProperty(t)&&(t=S[t]))}return E[t]||t},t.prototype.getGlobalEventTarget=function(e,t){return"window"===t?window:"document"===t?e:"body"===t?e.body:null},t.prototype.getHistory=function(){return window.history},t.prototype.getLocation=function(){return window.location},t.prototype.getBaseHref=function(e){var t=D||(D=document.querySelector("base"))?D.getAttribute("href"):null;return null==t?null:function(e){return O||(O=document.createElement("a")),O.setAttribute("href",e),"/"===O.pathname.charAt(0)?O.pathname:"/"+O.pathname}(t)},t.prototype.resetBaseElement=function(){D=null},t.prototype.getUserAgent=function(){return window.navigator.userAgent},t.prototype.setData=function(e,t,n){this.setAttribute(e,"data-"+t,n)},t.prototype.getData=function(e,t){return this.getAttribute(e,"data-"+t)},t.prototype.getComputedStyle=function(e){return getComputedStyle(e)},t.prototype.supportsWebAnimation=function(){return"function"==typeof Element.prototype.animate},t.prototype.performanceNow=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()},t.prototype.supportsCookies=function(){return!0},t.prototype.getCookie=function(e){return Object(b["\u0275parseCookieValue"])(document.cookie,e)},t.prototype.setCookie=function(e,t){document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)},t}(function(e){function t(){var t=e.call(this)||this;t._animationPrefix=null,t._transitionEnd=null;try{var n=t.createElement("div",document);if(null!=t.getStyle(n,"animationName"))t._animationPrefix="";else for(var r=["Webkit","Moz","O","ms"],i=0;i<r.length;i++)if(null!=t.getStyle(n,r[i]+"AnimationName")){t._animationPrefix="-"+r[i].toLowerCase()+"-";break}var o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};Object.keys(o).forEach(function(e){null!=t.getStyle(n,e)&&(t._transitionEnd=o[e])})}catch(e){t._animationPrefix=null,t._transitionEnd=null}return t}return Object(w.__extends)(t,e),t.prototype.getDistributedNodes=function(e){return e.getDistributedNodes()},t.prototype.resolveAndSetHref=function(e,t,n){e.href=null==n?t:t+"/../"+n},t.prototype.supportsDOMEvents=function(){return!0},t.prototype.supportsNativeShadowDOM=function(){return"function"==typeof document.body.createShadowRoot},t.prototype.getAnimationPrefix=function(){return this._animationPrefix?this._animationPrefix:""},t.prototype.getTransitionEnd=function(){return this._transitionEnd?this._transitionEnd:""},t.prototype.supportsAnimation=function(){return null!=this._animationPrefix&&null!=this._transitionEnd},t}(function(){function e(){this.resourceLoaderType=null}return Object.defineProperty(e.prototype,"attrToPropMap",{get:function(){return this._attrToPropMap},set:function(e){this._attrToPropMap=e},enumerable:!0,configurable:!0}),e}())),D=null,I=b.DOCUMENT,R=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n._init(),n}return Object(w.__extends)(t,e),t.prototype._init=function(){this.location=r().getLocation(),this._history=r().getHistory()},t.prototype.getBaseHrefFromDOM=function(){return r().getBaseHref(this._doc)},t.prototype.onPopState=function(e){r().getGlobalEventTarget(this._doc,"window").addEventListener("popstate",e,!1)},t.prototype.onHashChange=function(e){r().getGlobalEventTarget(this._doc,"window").addEventListener("hashchange",e,!1)},Object.defineProperty(t.prototype,"pathname",{get:function(){return this.location.pathname},set:function(e){this.location.pathname=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"search",{get:function(){return this.location.search},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hash",{get:function(){return this.location.hash},enumerable:!0,configurable:!0}),t.prototype.pushState=function(e,t,n){i()?this._history.pushState(e,t,n):this.location.hash=n},t.prototype.replaceState=function(e,t,n){i()?this._history.replaceState(e,t,n):this.location.hash=n},t.prototype.forward=function(){this._history.forward()},t.prototype.back=function(){this._history.back()},t.ctorParameters=function(){return[{type:void 0,decorators:[{type:_.Inject,args:[I]}]}]},t}(b.PlatformLocation),M=function(){function e(e){this._doc=e,this._dom=r()}return e.prototype.addTag=function(e,t){return void 0===t&&(t=!1),e?this._getOrCreateElement(e,t):null},e.prototype.addTags=function(e,t){var n=this;return void 0===t&&(t=!1),e?e.reduce(function(e,r){return r&&e.push(n._getOrCreateElement(r,t)),e},[]):[]},e.prototype.getTag=function(e){return e?this._dom.querySelector(this._doc,"meta["+e+"]")||null:null},e.prototype.getTags=function(e){if(!e)return[];var t=this._dom.querySelectorAll(this._doc,"meta["+e+"]");return t?[].slice.call(t):[]},e.prototype.updateTag=function(e,t){if(!e)return null;t=t||this._parseSelector(e);var n=this.getTag(t);return n?this._setMetaElementAttributes(e,n):this._getOrCreateElement(e,!0)},e.prototype.removeTag=function(e){this.removeTagElement(this.getTag(e))},e.prototype.removeTagElement=function(e){e&&this._dom.remove(e)},e.prototype._getOrCreateElement=function(e,t){if(void 0===t&&(t=!1),!t){var n=this._parseSelector(e),r=this.getTag(n);if(r&&this._containsAttributes(e,r))return r}var i=this._dom.createElement("meta");this._setMetaElementAttributes(e,i);var o=this._dom.getElementsByTagName(this._doc,"head")[0];return this._dom.appendChild(o,i),i},e.prototype._setMetaElementAttributes=function(e,t){var n=this;return Object.keys(e).forEach(function(r){return n._dom.setAttribute(t,r,e[r])}),t},e.prototype._parseSelector=function(e){var t=e.name?"name":"property";return t+'="'+e[t]+'"'},e.prototype._containsAttributes=function(e,t){var n=this;return Object.keys(e).every(function(r){return n._dom.getAttribute(t,r)===e[r]})},e}(),P=new _.InjectionToken("TRANSITION_ID"),N=[{provide:_.APP_INITIALIZER,useFactory:function(e,t,n){return function(){n.get(_.ApplicationInitStatus).donePromise.then(function(){var n=r();Array.prototype.slice.apply(n.querySelectorAll(t,"style[ng-transition]")).filter(function(t){return n.getAttribute(t,"ng-transition")===e}).forEach(function(e){return n.remove(e)})})}},deps:[P,I,_.Injector],multi:!0}],A=function(){function e(){}return e.init=function(){Object(_.setTestabilityGetter)(new e)},e.prototype.addToWindow=function(e){_["\u0275global"].getAngularTestability=function(t,n){void 0===n&&(n=!0);var r=e.findTestabilityInTree(t,n);if(null==r)throw new Error("Could not find testability for element.");return r},_["\u0275global"].getAllAngularTestabilities=function(){return e.getAllTestabilities()},_["\u0275global"].getAllAngularRootElements=function(){return e.getAllRootElements()},_["\u0275global"].frameworkStabilizers||(_["\u0275global"].frameworkStabilizers=[]),_["\u0275global"].frameworkStabilizers.push(function(e){var t=_["\u0275global"].getAllAngularTestabilities(),n=t.length,r=!1,i=function(t){r=r||t,0==--n&&e(r)};t.forEach(function(e){e.whenStable(i)})})},e.prototype.findTestabilityInTree=function(e,t,n){if(null==t)return null;var i=e.getTestability(t);return null!=i?i:n?r().isShadowRoot(t)?this.findTestabilityInTree(e,r().getHost(t),!0):this.findTestabilityInTree(e,r().parentElement(t),!0):null},e}(),L=function(){function e(e){this._doc=e}return e.prototype.getTitle=function(){return r().getTitle(this._doc)},e.prototype.setTitle=function(e){r().setTitle(this._doc,e)},e}(),F={ApplicationRef:_.ApplicationRef,NgZone:_.NgZone},j="probe",V="coreTokens",z=new _.InjectionToken("EventManagerPlugins"),B=function(){function e(e,t){var n=this;this._zone=t,this._eventNameToPlugin=new Map,e.forEach(function(e){return e.manager=n}),this._plugins=e.slice().reverse()}return e.prototype.addEventListener=function(e,t,n){return this._findPluginFor(t).addEventListener(e,t,n)},e.prototype.addGlobalEventListener=function(e,t,n){return this._findPluginFor(t).addGlobalEventListener(e,t,n)},e.prototype.getZone=function(){return this._zone},e.prototype._findPluginFor=function(e){var t=this._eventNameToPlugin.get(e);if(t)return t;for(var n=this._plugins,r=0;r<n.length;r++){var i=n[r];if(i.supports(e))return this._eventNameToPlugin.set(e,i),i}throw new Error("No event manager plugin found for event "+e)},e}(),H=function(){function e(e){this._doc=e}return e.prototype.addGlobalEventListener=function(e,t,n){var i=r().getGlobalEventTarget(this._doc,e);if(!i)throw new Error("Unsupported event target "+i+" for event "+t);return this.addEventListener(i,t,n)},e}(),W=function(){function e(){this._stylesSet=new Set}return e.prototype.addStyles=function(e){var t=this,n=new Set;e.forEach(function(e){t._stylesSet.has(e)||(t._stylesSet.add(e),n.add(e))}),this.onStylesAdded(n)},e.prototype.onStylesAdded=function(e){},e.prototype.getAllStyles=function(){return Array.from(this._stylesSet)},e}(),q=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n._hostNodes=new Set,n._styleNodes=new Set,n._hostNodes.add(t.head),n}return Object(w.__extends)(t,e),t.prototype._addStylesToHost=function(e,t){var n=this;e.forEach(function(e){var r=n._doc.createElement("style");r.textContent=e,n._styleNodes.add(t.appendChild(r))})},t.prototype.addHost=function(e){this._addStylesToHost(this._stylesSet,e),this._hostNodes.add(e)},t.prototype.removeHost=function(e){this._hostNodes.delete(e)},t.prototype.onStylesAdded=function(e){var t=this;this._hostNodes.forEach(function(n){return t._addStylesToHost(e,n)})},t.prototype.ngOnDestroy=function(){this._styleNodes.forEach(function(e){return r().remove(e)})},t}(W),U={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},G=/%COMP%/g,K="_nghost-%COMP%",$="_ngcontent-%COMP%",Z=function(){function e(e,t){this.eventManager=e,this.sharedStylesHost=t,this.rendererByCompId=new Map,this.defaultRenderer=new Q(e)}return e.prototype.createRenderer=function(e,t){if(!e||!t)return this.defaultRenderer;switch(t.encapsulation){case _.ViewEncapsulation.Emulated:var n=this.rendererByCompId.get(t.id);return n||(n=new X(this.eventManager,this.sharedStylesHost,t),this.rendererByCompId.set(t.id,n)),n.applyToHost(e),n;case _.ViewEncapsulation.Native:return new J(this.eventManager,this.sharedStylesHost,e,t);default:if(!this.rendererByCompId.has(t.id)){var r=s(t.id,t.styles,[]);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(t.id,this.defaultRenderer)}return this.defaultRenderer}},e.prototype.begin=function(){},e.prototype.end=function(){},e}(),Q=function(){function e(e){this.eventManager=e,this.data=Object.create(null)}return e.prototype.destroy=function(){},e.prototype.createElement=function(e,t){return t?document.createElementNS(U[t],e):document.createElement(e)},e.prototype.createComment=function(e){return document.createComment(e)},e.prototype.createText=function(e){return document.createTextNode(e)},e.prototype.appendChild=function(e,t){e.appendChild(t)},e.prototype.insertBefore=function(e,t,n){e&&e.insertBefore(t,n)},e.prototype.removeChild=function(e,t){e&&e.removeChild(t)},e.prototype.selectRootElement=function(e){var t="string"==typeof e?document.querySelector(e):e;if(!t)throw new Error('The selector "'+e+'" did not match any elements');return t.textContent="",t},e.prototype.parentNode=function(e){return e.parentNode},e.prototype.nextSibling=function(e){return e.nextSibling},e.prototype.setAttribute=function(e,t,n,r){if(r){t=r+":"+t;var i=U[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)},e.prototype.removeAttribute=function(e,t,n){if(n){var r=U[n];r?e.removeAttributeNS(r,t):e.removeAttribute(n+":"+t)}else e.removeAttribute(t)},e.prototype.addClass=function(e,t){e.classList.add(t)},e.prototype.removeClass=function(e,t){e.classList.remove(t)},e.prototype.setStyle=function(e,t,n,r){r&_.RendererStyleFlags2.DashCase?e.style.setProperty(t,n,r&_.RendererStyleFlags2.Important?"important":""):e.style[t]=n},e.prototype.removeStyle=function(e,t,n){n&_.RendererStyleFlags2.DashCase?e.style.removeProperty(t):e.style[t]=""},e.prototype.setProperty=function(e,t,n){c(t,"property"),e[t]=n},e.prototype.setValue=function(e,t){e.nodeValue=t},e.prototype.listen=function(e,t,n){return c(t,"listener"),"string"==typeof e?this.eventManager.addGlobalEventListener(e,t,u(n)):this.eventManager.addEventListener(e,t,u(n))},e}(),Y="@".charCodeAt(0),X=function(e){function t(t,n,r){var i=e.call(this,t)||this;i.component=r;var o=s(r.id,r.styles,[]);return n.addStyles(o),i.contentAttr=$.replace(G,r.id),i.hostAttr=K.replace(G,r.id),i}return Object(w.__extends)(t,e),t.prototype.applyToHost=function(t){e.prototype.setAttribute.call(this,t,this.hostAttr,"")},t.prototype.createElement=function(t,n){var r=e.prototype.createElement.call(this,t,n);return e.prototype.setAttribute.call(this,r,this.contentAttr,""),r},t}(Q),J=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;o.sharedStylesHost=n,o.hostEl=r,o.component=i,o.shadowRoot=r.createShadowRoot(),o.sharedStylesHost.addHost(o.shadowRoot);for(var l=s(i.id,i.styles,[]),a=0;a<l.length;a++){var u=document.createElement("style");u.textContent=l[a],o.shadowRoot.appendChild(u)}return o}return Object(w.__extends)(t,e),t.prototype.nodeOrShadowRoot=function(e){return e===this.hostEl?this.shadowRoot:e},t.prototype.destroy=function(){this.sharedStylesHost.removeHost(this.shadowRoot)},t.prototype.appendChild=function(t,n){return e.prototype.appendChild.call(this,this.nodeOrShadowRoot(t),n)},t.prototype.insertBefore=function(t,n,r){return e.prototype.insertBefore.call(this,this.nodeOrShadowRoot(t),n,r)},t.prototype.removeChild=function(t,n){return e.prototype.removeChild.call(this,this.nodeOrShadowRoot(t),n)},t.prototype.parentNode=function(t){return this.nodeOrShadowRoot(e.prototype.parentNode.call(this,this.nodeOrShadowRoot(t)))},t}(Q),ee="undefined"!=typeof Zone&&Zone.__symbol__||function(e){return"__zone_symbol__"+e},te=ee("addEventListener"),ne=ee("removeEventListener"),re={},ie="removeEventListener",oe="__zone_symbol__propagationStopped",le="__zone_symbol__stopImmediatePropagation";"undefined"!=typeof Zone&&Zone[ee("BLACK_LISTED_EVENTS")]&&(T={});var ae=function(e){return!!T&&T.hasOwnProperty(e)},se=function(e){var t=re[e.type];if(t){var n=this[t];if(n){var r=[e];if(1===n.length)return(l=n[0]).zone!==Zone.current?l.zone.run(l.handler,this,r):l.handler.apply(this,r);for(var i=n.slice(),o=0;o<i.length&&!0!==e[oe];o++){var l;(l=i[o]).zone!==Zone.current?l.zone.run(l.handler,this,r):l.handler.apply(this,r)}}}},ue=function(e){function t(t,n){var r=e.call(this,t)||this;return r.ngZone=n,r.patchEvent(),r}return Object(w.__extends)(t,e),t.prototype.patchEvent=function(){if(Event&&Event.prototype&&!Event.prototype[le]){var e=Event.prototype[le]=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[oe]=!0),e&&e.apply(this,arguments)}}},t.prototype.supports=function(e){return!0},t.prototype.addEventListener=function(e,t,n){var r=this,i=n;if(!e[te]||_.NgZone.isInAngularZone()&&!ae(t))e.addEventListener(t,i,!1);else{var o=re[t];o||(o=re[t]=ee("ANGULAR"+t+"FALSE"));var l=e[o],a=l&&l.length>0;l||(l=e[o]=[]);var s=ae(t)?Zone.root:Zone.current;if(0===l.length)l.push({zone:s,handler:i});else{for(var u=!1,c=0;c<l.length;c++)if(l[c].handler===i){u=!0;break}u||l.push({zone:s,handler:i})}a||e[te](t,se,!1)}return function(){return r.removeEventListener(e,t,i)}},t.prototype.removeEventListener=function(e,t,n){var r=e[ne];if(!r)return e[ie].apply(e,[t,n,!1]);var i=re[t],o=i&&e[i];if(!o)return e[ie].apply(e,[t,n,!1]);for(var l=!1,a=0;a<o.length;a++)if(o[a].handler===n){l=!0,o.splice(a,1);break}l?0===o.length&&r.apply(e,[t,se,!1]):e[ie].apply(e,[t,n,!1])},t}(H),ce={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},de=new _.InjectionToken("HammerGestureConfig"),pe=function(){function e(){this.events=[],this.overrides={}}return e.prototype.buildHammer=function(e){var t=new Hammer(e);t.get("pinch").set({enable:!0}),t.get("rotate").set({enable:!0});for(var n in this.overrides)t.get(n).set(this.overrides[n]);return t},e}(),fe=function(e){function t(t,n){var r=e.call(this,t)||this;return r._config=n,r}return Object(w.__extends)(t,e),t.prototype.supports=function(e){if(!ce.hasOwnProperty(e.toLowerCase())&&!this.isCustomEvent(e))return!1;if(!window.Hammer)throw new Error("Hammer.js is not loaded, can not bind "+e+" event");return!0},t.prototype.addEventListener=function(e,t,n){var r=this,i=this.manager.getZone();return t=t.toLowerCase(),i.runOutsideAngular(function(){var o=r._config.buildHammer(e),l=function(e){i.runGuarded(function(){n(e)})};return o.on(t,l),function(){return o.off(t,l)}})},t.prototype.isCustomEvent=function(e){return this._config.events.indexOf(e)>-1},t}(H),he=["alt","control","meta","shift"],me={alt:function(e){return e.altKey},control:function(e){return e.ctrlKey},meta:function(e){return e.metaKey},shift:function(e){return e.shiftKey}},ge=function(e){function t(t){return e.call(this,t)||this}return Object(w.__extends)(t,e),t.prototype.supports=function(e){return null!=t.parseEventName(e)},t.prototype.addEventListener=function(e,n,i){var o=t.parseEventName(n),l=t.eventCallback(o.fullKey,i,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return r().onAndCancel(e,o.domEventName,l)})},t.parseEventName=function(e){var n=e.toLowerCase().split("."),r=n.shift();if(0===n.length||"keydown"!==r&&"keyup"!==r)return null;var i=t._normalizeKey(n.pop()),o="";if(he.forEach(function(e){var t=n.indexOf(e);t>-1&&(n.splice(t,1),o+=e+".")}),o+=i,0!=n.length||0===i.length)return null;var l={};return l.domEventName=r,l.fullKey=o,l},t.getEventFullKey=function(e){var t="",n=r().getEventKey(e);return" "===(n=n.toLowerCase())?n="space":"."===n&&(n="dot"),he.forEach(function(r){r!=n&&(0,me[r])(e)&&(t+=r+".")}),t+=n},t.eventCallback=function(e,n,r){return function(i){t.getEventFullKey(i)===e&&r.runGuarded(function(){return n(i)})}},t._normalizeKey=function(e){switch(e){case"esc":return"escape";default:return e}},t}(H),ye=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,ve=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i,be=null,_e=null,we=p("area,br,col,hr,img,wbr"),xe=p("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Ce=p("rp,rt"),Ee=f(Ce,xe),Se=f(we,f(xe,p("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),f(Ce,p("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),Ee),Oe=p("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),Te=p("srcset"),ke=f(Oe,Te,p("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width")),De=function(){function e(){this.sanitizedSomething=!1,this.buf=[]}return e.prototype.sanitizeChildren=function(e){for(var t=e.firstChild;t;)if(_e.isElementNode(t)?this.startElement(t):_e.isTextNode(t)?this.chars(_e.nodeValue(t)):this.sanitizedSomething=!0,_e.firstChild(t))t=_e.firstChild(t);else for(;t;){_e.isElementNode(t)&&this.endElement(t);var n=h(t,_e.nextSibling(t));if(n){t=n;break}t=h(t,_e.parentElement(t))}return this.buf.join("")},e.prototype.startElement=function(e){var t=this,n=_e.nodeName(e).toLowerCase();Se.hasOwnProperty(n)?(this.buf.push("<"),this.buf.push(n),_e.attributeMap(e).forEach(function(e,n){var r=n.toLowerCase();ke.hasOwnProperty(r)?(Oe[r]&&(e=d(e)),Te[r]&&(e=function(e){return(e=String(e)).split(",").map(function(e){return d(e.trim())}).join(", ")}(e)),t.buf.push(" "),t.buf.push(n),t.buf.push('="'),t.buf.push(m(e)),t.buf.push('"')):t.sanitizedSomething=!0}),this.buf.push(">")):this.sanitizedSomething=!0},e.prototype.endElement=function(e){var t=_e.nodeName(e).toLowerCase();Se.hasOwnProperty(t)&&!we.hasOwnProperty(t)&&(this.buf.push("</"),this.buf.push(t),this.buf.push(">"))},e.prototype.chars=function(e){this.buf.push(m(e))},e}(),Ie=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Re=/([^\#-~ |!])/g,Me=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),Pe=/^url\(([^)]+)\)$/,Ne=function(){},Ae=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n}return Object(w.__extends)(t,e),t.prototype.sanitize=function(e,t){if(null==t)return null;switch(e){case _.SecurityContext.NONE:return t;case _.SecurityContext.HTML:return t instanceof Fe?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"HTML"),function(e,t){try{var n=function(){if(be)return be;var e=(_e=r()).createElement("template");if("content"in e)return e;var t=_e.createHtmlDocument();if(null==(be=_e.querySelector(t,"body"))){var n=_e.createElement("html",t);be=_e.createElement("body",t),_e.appendChild(n,be),_e.appendChild(t,n)}return be}(),i=t?String(t):"",o=5,l=i;do{if(0===o)throw new Error("Failed to sanitize html because the input is unstable");o--,_e.setInnerHTML(n,i=l),e.documentMode&&g(n),l=_e.getInnerHTML(n)}while(i!==l);for(var a=new De,s=a.sanitizeChildren(_e.getTemplateContent(n)||n),u=_e.getTemplateContent(n)||n,c=0,d=_e.childNodesAsList(u);c<d.length;c++)_e.removeChild(u,d[c]);return Object(_.isDevMode)()&&a.sanitizedSomething&&_e.log("WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss)."),s}catch(e){throw be=null,e}}(this._doc,String(t)));case _.SecurityContext.STYLE:return t instanceof je?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"Style"),function(e){if(!(e=String(e).trim()))return"";var t=e.match(Pe);return t&&d(t[1])===t[1]||e.match(Me)&&function(e){for(var t=!0,n=!0,r=0;r<e.length;r++){var i=e.charAt(r);"'"===i&&n?t=!t:'"'===i&&t&&(n=!n)}return t&&n}(e)?e:(Object(_.isDevMode)()&&r().log("WARNING: sanitizing unsafe style value "+e+" (see http://g.co/ng/security#xss)."),"unsafe")}(t));case _.SecurityContext.SCRIPT:if(t instanceof Ve)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"Script"),new Error("unsafe value used in a script context");case _.SecurityContext.URL:return t instanceof Be||t instanceof ze?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"URL"),d(String(t)));case _.SecurityContext.RESOURCE_URL:if(t instanceof Be)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error("Unexpected SecurityContext "+e+" (see http://g.co/ng/security#xss)")}},t.prototype.checkNotSafeValue=function(e,t){if(e instanceof Le)throw new Error("Required a safe "+t+", got a "+e.getTypeName()+" (see http://g.co/ng/security#xss)")},t.prototype.bypassSecurityTrustHtml=function(e){return new Fe(e)},t.prototype.bypassSecurityTrustStyle=function(e){return new je(e)},t.prototype.bypassSecurityTrustScript=function(e){return new Ve(e)},t.prototype.bypassSecurityTrustUrl=function(e){return new ze(e)},t.prototype.bypassSecurityTrustResourceUrl=function(e){return new Be(e)},t}(Ne),Le=function(){function e(e){this.changingThisBreaksApplicationSecurity=e}return e.prototype.toString=function(){return"SafeValue must use [property]=binding: "+this.changingThisBreaksApplicationSecurity+" (see http://g.co/ng/security#xss)"},e}(),Fe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"HTML"},t}(Le),je=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"Style"},t}(Le),Ve=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"Script"},t}(Le),ze=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"URL"},t}(Le),Be=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"ResourceURL"},t}(Le),He=[{provide:_.PLATFORM_ID,useValue:b["\u0275PLATFORM_BROWSER_ID"]},{provide:_.PLATFORM_INITIALIZER,useValue:function(){k.makeCurrent(),A.init()},multi:!0},{provide:b.PlatformLocation,useClass:R,deps:[I]},{provide:I,useFactory:function(){return document},deps:[]}],We=Object(_.createPlatformFactory)(_.platformCore,"browser",He),qe=function(){function e(e){if(e)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}return e.withServerTransition=function(t){return{ngModule:e,providers:[{provide:_.APP_ID,useValue:t.appId},{provide:P,useExisting:_.APP_ID},N]}},e}();"undefined"!=typeof window&&window},TJLg:function(e,t,n){var r=n("rMsi"),i=n("RT4T"),o=n("yIWP")("IE_PROTO"),l=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},TO51:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"SubjectSubscriber",function(){return c}),n.d(t,"Subject",function(){return d}),n.d(t,"AnonymousSubject",function(){return p});var r=n("6Xbx"),i=n("AP4T"),o=n("E9/g"),l=n("qLnt"),a=n("Upor"),s=n("jaVc"),u=n("V7AE"),c=function(e){function t(t){e.call(this,t),this.destination=t}return Object(r.__extends)(t,e),t}(o.a),d=function(e){function t(){e.call(this),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}return Object(r.__extends)(t,e),t.prototype[u.a]=function(){return new c(this)},t.prototype.lift=function(e){var t=new p(this,this);return t.operator=e,t},t.prototype.next=function(e){if(this.closed)throw new a.a;if(!this.isStopped)for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].next(e)},t.prototype.error=function(e){if(this.closed)throw new a.a;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].error(e);this.observers.length=0},t.prototype.complete=function(){if(this.closed)throw new a.a;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),r=0;r<t;r++)n[r].complete();this.observers.length=0},t.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},t.prototype._trySubscribe=function(t){if(this.closed)throw new a.a;return e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){if(this.closed)throw new a.a;return this.hasError?(e.error(this.thrownError),l.a.EMPTY):this.isStopped?(e.complete(),l.a.EMPTY):(this.observers.push(e),new s.a(this,e))},t.prototype.asObservable=function(){var e=new i.a;return e.source=this,e},t.create=function(e,t){return new p(e,t)},t}(i.a),p=function(e){function t(t,n){e.call(this),this.destination=t,this.source=n}return Object(r.__extends)(t,e),t.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},t.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},t.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},t.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):l.a.EMPTY},t}(d)},"TU+8":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("+iEx"),i=(n.n(r),n("eFQL"));n.n(i)},ThPn:function(e,t,n){"use strict";var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e,t){this.observables=e,this.project=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.observables,this.project))},e}(),a=function(e){function t(t,n,r){e.call(this,t),this.observables=n,this.project=r,this.toRespond=[];var i=n.length;this.values=new Array(i);for(var l=0;l<i;l++)this.toRespond.push(l);for(l=0;l<i;l++){var a=n[l];this.add(Object(o.a)(this,a,a,l))}}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.values[n]=t;var o=this.toRespond;if(o.length>0){var l=o.indexOf(n);-1!==l&&o.splice(l,1)}},t.prototype.notifyComplete=function(){},t.prototype._next=function(e){if(0===this.toRespond.length){var t=[e].concat(this.values);this.project?this._tryProject(t):this.destination.next(t)}},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(i.a);t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(t){var n;return"function"==typeof e[e.length-1]&&(n=e.pop()),t.lift(new l(e,n))}}.apply(void 0,e)(this)}},UKZQ:function(e,t,n){var r=n("a7b8");e.exports=function(e,t){return new(r(e))(t)}},ULWX:function(e,t,n){var r=n("+pQw");e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},URbD:function(e,t,n){"use strict";t.a=function(){return Object(r.a)()(this)};var r=n("eIqN")},UlVq:function(e,t,n){var r=n("3r0D")("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],l=o[r]();l.next=function(){return{done:n=!0}},o[r]=function(){return l},e(o)}catch(e){}return n}},Ula3:function(e,t,n){var r=n("JXkd"),i=n("5oDA").set;e.exports=function(e,t,n){var o,l=t.constructor;return l!==n&&"function"==typeof l&&(o=l.prototype)!==n.prototype&&r(o)&&i&&i(e,o),e}},Un6q:function(e,t,n){"use strict";function r(e){return e.replace(/\/index.html$/,"")}function i(e,t,n){"string"!=typeof t&&(n=t,t=e[0]),t=t.toLowerCase().replace(/_/g,"-"),me[t]=e,n&&(me[t][18]=n)}function o(e){return S(e)[0]}function l(e,t,n){var r=S(e);return C(C([r[1],r[2]],t),n)}function a(e,t,n){var r=S(e);return C(C([r[3],r[4]],t),n)}function s(e,t,n){var r=S(e);return C(C([r[5],r[6]],t),n)}function u(e,t){return C(S(e)[7],t)}function c(e){return S(e)[8]}function d(e){return S(e)[9]}function p(e,t){return S(e)[10][t]}function f(e,t){return S(e)[11][t]}function h(e,t){return C(S(e)[12],t)}function m(e,t){var n=S(e),r=n[13][t];if(void 0===r){if(t===we.CurrencyDecimal)return n[13][we.Decimal];if(t===we.CurrencyGroup)return n[13][we.Group]}return r}function g(e,t){return S(e)[14][t]}function y(e){return S(e)[15]||null}function v(e){return S(e)[16]||null}function b(e){return S(e)[17]}function _(e){if(!e[18])throw new Error('Missing extra locale data for the locale "'+e[0]+'". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.')}function w(e){var t=S(e);return _(t),(t[18][2]||[]).map(function(e){return"string"==typeof e?E(e):[E(e[0]),E(e[1])]})}function x(e,t,n){var r=S(e);return _(r),C(C([r[18][0],r[18][1]],t)||[],n)||[]}function C(e,t){for(var n=t;n>-1;n--)if(void 0!==e[n])return e[n];throw new Error("Locale data API: locale data undefined")}function E(e){var t=e.split(":");return{hours:+t[0],minutes:+t[1]}}function S(e){var t=e.toLowerCase().replace(/_/g,"-"),n=me[t];if(n)return n;var r=t.split("-")[0];if(n=me[r])return n;if("en"===r)return he;throw new Error('Missing locale data for the locale "'+e+'".')}function O(e,t,n,r){var i="="+e;if(t.indexOf(i)>-1)return i;if(i=n.getPluralCategory(e,r),t.indexOf(i)>-1)return i;if(t.indexOf("other")>-1)return"other";throw new Error('No plural message found for value "'+e+'"')}function T(e,t){"string"==typeof t&&(t=parseInt(t,10));var n=t,r=n.toString().replace(/^[^.]*\.?/,""),i=Math.floor(Math.abs(n)),o=r.length,l=parseInt(r,10),a=parseInt(n.toString().replace(/^[^.]*\.?|0+$/g,""),10)||0;switch(e.split("-")[0].toLowerCase()){case"af":case"asa":case"az":case"bem":case"bez":case"bg":case"brx":case"ce":case"cgg":case"chr":case"ckb":case"ee":case"el":case"eo":case"es":case"eu":case"fo":case"fur":case"gsw":case"ha":case"haw":case"hu":case"jgo":case"jmc":case"ka":case"kk":case"kkj":case"kl":case"ks":case"ksb":case"ky":case"lb":case"lg":case"mas":case"mgo":case"ml":case"mn":case"nb":case"nd":case"ne":case"nn":case"nnh":case"nyn":case"om":case"or":case"os":case"ps":case"rm":case"rof":case"rwk":case"saq":case"seh":case"sn":case"so":case"sq":case"ta":case"te":case"teo":case"tk":case"tr":case"ug":case"uz":case"vo":case"vun":case"wae":case"xog":return 1===n?ye.One:ye.Other;case"ak":case"ln":case"mg":case"pa":case"ti":return n===Math.floor(n)&&n>=0&&n<=1?ye.One:ye.Other;case"am":case"as":case"bn":case"fa":case"gu":case"hi":case"kn":case"mr":case"zu":return 0===i||1===n?ye.One:ye.Other;case"ar":return 0===n?ye.Zero:1===n?ye.One:2===n?ye.Two:n%100===Math.floor(n%100)&&n%100>=3&&n%100<=10?ye.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=99?ye.Many:ye.Other;case"ast":case"ca":case"de":case"en":case"et":case"fi":case"fy":case"gl":case"it":case"nl":case"sv":case"sw":case"ur":case"yi":return 1===i&&0===o?ye.One:ye.Other;case"be":return n%10==1&&n%100!=11?ye.One:n%10===Math.floor(n%10)&&n%10>=2&&n%10<=4&&!(n%100>=12&&n%100<=14)?ye.Few:n%10==0||n%10===Math.floor(n%10)&&n%10>=5&&n%10<=9||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=14?ye.Many:ye.Other;case"br":return n%10==1&&n%100!=11&&n%100!=71&&n%100!=91?ye.One:n%10==2&&n%100!=12&&n%100!=72&&n%100!=92?ye.Two:n%10===Math.floor(n%10)&&(n%10>=3&&n%10<=4||n%10==9)&&!(n%100>=10&&n%100<=19||n%100>=70&&n%100<=79||n%100>=90&&n%100<=99)?ye.Few:0!==n&&n%1e6==0?ye.Many:ye.Other;case"bs":case"hr":case"sr":return 0===o&&i%10==1&&i%100!=11||l%10==1&&l%100!=11?ye.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)||l%10===Math.floor(l%10)&&l%10>=2&&l%10<=4&&!(l%100>=12&&l%100<=14)?ye.Few:ye.Other;case"cs":case"sk":return 1===i&&0===o?ye.One:i===Math.floor(i)&&i>=2&&i<=4&&0===o?ye.Few:0!==o?ye.Many:ye.Other;case"cy":return 0===n?ye.Zero:1===n?ye.One:2===n?ye.Two:3===n?ye.Few:6===n?ye.Many:ye.Other;case"da":return 1===n||0!==a&&(0===i||1===i)?ye.One:ye.Other;case"dsb":case"hsb":return 0===o&&i%100==1||l%100==1?ye.One:0===o&&i%100==2||l%100==2?ye.Two:0===o&&i%100===Math.floor(i%100)&&i%100>=3&&i%100<=4||l%100===Math.floor(l%100)&&l%100>=3&&l%100<=4?ye.Few:ye.Other;case"ff":case"fr":case"hy":case"kab":return 0===i||1===i?ye.One:ye.Other;case"fil":return 0===o&&(1===i||2===i||3===i)||0===o&&i%10!=4&&i%10!=6&&i%10!=9||0!==o&&l%10!=4&&l%10!=6&&l%10!=9?ye.One:ye.Other;case"ga":return 1===n?ye.One:2===n?ye.Two:n===Math.floor(n)&&n>=3&&n<=6?ye.Few:n===Math.floor(n)&&n>=7&&n<=10?ye.Many:ye.Other;case"gd":return 1===n||11===n?ye.One:2===n||12===n?ye.Two:n===Math.floor(n)&&(n>=3&&n<=10||n>=13&&n<=19)?ye.Few:ye.Other;case"gv":return 0===o&&i%10==1?ye.One:0===o&&i%10==2?ye.Two:0!==o||i%100!=0&&i%100!=20&&i%100!=40&&i%100!=60&&i%100!=80?0!==o?ye.Many:ye.Other:ye.Few;case"he":return 1===i&&0===o?ye.One:2===i&&0===o?ye.Two:0!==o||n>=0&&n<=10||n%10!=0?ye.Other:ye.Many;case"is":return 0===a&&i%10==1&&i%100!=11||0!==a?ye.One:ye.Other;case"ksh":return 0===n?ye.Zero:1===n?ye.One:ye.Other;case"kw":case"naq":case"se":case"smn":return 1===n?ye.One:2===n?ye.Two:ye.Other;case"lag":return 0===n?ye.Zero:0!==i&&1!==i||0===n?ye.Other:ye.One;case"lt":return n%10!=1||n%100>=11&&n%100<=19?n%10===Math.floor(n%10)&&n%10>=2&&n%10<=9&&!(n%100>=11&&n%100<=19)?ye.Few:0!==l?ye.Many:ye.Other:ye.One;case"lv":case"prg":return n%10==0||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19||2===o&&l%100===Math.floor(l%100)&&l%100>=11&&l%100<=19?ye.Zero:n%10==1&&n%100!=11||2===o&&l%10==1&&l%100!=11||2!==o&&l%10==1?ye.One:ye.Other;case"mk":return 0===o&&i%10==1||l%10==1?ye.One:ye.Other;case"mt":return 1===n?ye.One:0===n||n%100===Math.floor(n%100)&&n%100>=2&&n%100<=10?ye.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19?ye.Many:ye.Other;case"pl":return 1===i&&0===o?ye.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)?ye.Few:0===o&&1!==i&&i%10===Math.floor(i%10)&&i%10>=0&&i%10<=1||0===o&&i%10===Math.floor(i%10)&&i%10>=5&&i%10<=9||0===o&&i%100===Math.floor(i%100)&&i%100>=12&&i%100<=14?ye.Many:ye.Other;case"pt":return n===Math.floor(n)&&n>=0&&n<=2&&2!==n?ye.One:ye.Other;case"ro":return 1===i&&0===o?ye.One:0!==o||0===n||1!==n&&n%100===Math.floor(n%100)&&n%100>=1&&n%100<=19?ye.Few:ye.Other;case"ru":case"uk":return 0===o&&i%10==1&&i%100!=11?ye.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)?ye.Few:0===o&&i%10==0||0===o&&i%10===Math.floor(i%10)&&i%10>=5&&i%10<=9||0===o&&i%100===Math.floor(i%100)&&i%100>=11&&i%100<=14?ye.Many:ye.Other;case"shi":return 0===i||1===n?ye.One:n===Math.floor(n)&&n>=2&&n<=10?ye.Few:ye.Other;case"si":return 0===n||1===n||0===i&&1===l?ye.One:ye.Other;case"sl":return 0===o&&i%100==1?ye.One:0===o&&i%100==2?ye.Two:0===o&&i%100===Math.floor(i%100)&&i%100>=3&&i%100<=4||0!==o?ye.Few:ye.Other;case"tzm":return n===Math.floor(n)&&n>=0&&n<=1||n===Math.floor(n)&&n>=11&&n<=99?ye.One:ye.Other;default:return ye.Other}}function k(e,t){t=encodeURIComponent(t);for(var n=0,r=e.split(";");n<r.length;n++){var i=r[n],o=i.indexOf("="),l=-1==o?[i,""]:[i.slice(0,o),i.slice(o+1)],a=l[1];if(l[0].trim()===t)return decodeURIComponent(a)}return null}function D(e,t){var n=o(e);if(He[n]=He[n]||{},He[n][t])return He[n][t];var r="";switch(t){case"shortDate":r=p(e,_e.Short);break;case"mediumDate":r=p(e,_e.Medium);break;case"longDate":r=p(e,_e.Long);break;case"fullDate":r=p(e,_e.Full);break;case"shortTime":r=f(e,_e.Short);break;case"mediumTime":r=f(e,_e.Medium);break;case"longTime":r=f(e,_e.Long);break;case"fullTime":r=f(e,_e.Full);break;case"short":var i=D(e,"shortTime"),l=D(e,"shortDate");r=I(h(e,_e.Short),[i,l]);break;case"medium":var a=D(e,"mediumTime"),s=D(e,"mediumDate");r=I(h(e,_e.Medium),[a,s]);break;case"long":var u=D(e,"longTime"),c=D(e,"longDate");r=I(h(e,_e.Long),[u,c]);break;case"full":var d=D(e,"fullTime"),m=D(e,"fullDate");r=I(h(e,_e.Full),[d,m])}return r&&(He[n][t]=r),r}function I(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return null!=t&&n in t?t[n]:e})),e}function R(e,t,n,r,i){void 0===n&&(n="-");var o="";(e<0||i&&e<=0)&&(i?e=1-e:(e=-e,o=n));for(var l=""+e;l.length<t;)l="0"+l;return r&&(l=l.substr(l.length-t)),o+l}function M(e,t,n,r,i){return void 0===n&&(n=0),void 0===r&&(r=!1),void 0===i&&(i=!1),function(o,l){var a=function(e,t,n){switch(e){case Ue.FullYear:return t.getFullYear();case Ue.Month:return t.getMonth();case Ue.Date:return t.getDate();case Ue.Hours:return t.getHours();case Ue.Minutes:return t.getMinutes();case Ue.Seconds:return t.getSeconds();case Ue.Milliseconds:var r=1===n?100:2===n?10:1;return Math.round(t.getMilliseconds()/r);case Ue.Day:return t.getDay();default:throw new Error('Unknown DateType value "'+e+'".')}}(e,o,t);return(n>0||a>-n)&&(a+=n),e===Ue.Hours&&0===a&&-12===n&&(a=12),R(a,t,m(l,we.MinusSign),r,i)}}function P(e,t,n,r){return void 0===n&&(n=ve.Format),void 0===r&&(r=!1),function(i,o){return function(t,n,r,i,o,c){switch(e){case Ge.Months:return s(n,o,i)[t.getMonth()];case Ge.Days:return a(n,o,i)[t.getDay()];case Ge.DayPeriods:var d=t.getHours(),p=t.getMinutes();if(c){var f,h=w(n),m=x(n,o,i);if(h.forEach(function(e,t){if(Array.isArray(e)){var n=e[0],r=e[1],i=r.hours;d>=n.hours&&p>=n.minutes&&(d<i||d===i&&p<r.minutes)&&(f=m[t])}else e.hours===d&&e.minutes===p&&(f=m[t])}),f)return f}return l(n,o,i)[d<12?0:1];case Ge.Eras:return u(n,i)[t.getFullYear()<=0?0:1]}}(i,o,0,t,n,r)}}function N(e){return function(t,n,r){var i=-1*r,o=m(n,we.MinusSign),l=i>0?Math.floor(i/60):Math.ceil(i/60);switch(e){case qe.Short:return(i>=0?"+":"")+R(l,2,o)+R(Math.abs(i%60),2,o);case qe.ShortGMT:return"GMT"+(i>=0?"+":"")+R(l,1,o);case qe.Long:return"GMT"+(i>=0?"+":"")+R(l,2,o)+":"+R(Math.abs(i%60),2,o);case qe.Extended:return 0===r?"Z":(i>=0?"+":"")+R(l,2,o)+":"+R(Math.abs(i%60),2,o);default:throw new Error('Unknown zone width "'+e+'"')}}}function A(e,t){return void 0===t&&(t=!1),function(n,r){var i;if(t){var o=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,l=n.getDate();i=1+Math.floor((l+o)/7)}else{var a=function(e){var t=new Date(e,Ke,1).getDay();return new Date(e,0,1+(t<=$e?$e:$e+7)-t)}(n.getFullYear()),s=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+($e-e.getDay()))}(n).getTime()-a.getTime();i=1+Math.round(s/6048e5)}return R(i,e,m(r,we.MinusSign))}}function L(e,t){e=e.replace(/:/g,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(n)?t:n}function F(e,t){return Error("InvalidPipeArgument: '"+t+"' for pipe '"+Object(ie["\u0275stringify"])(e)+"'")}function j(e){var t=new Date(0),n=0,r=0,i=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=+(e[9]+e[10]),r=+(e[9]+e[11])),(e[8]?t.setUTCFullYear:t.setFullYear).call(t,+e[1],+e[2]-1,+e[3]);var o=+(e[4]||"0")-n,l=+(e[5]||"0")-r,a=+(e[6]||"0"),s=Math.round(1e3*parseFloat("0."+(e[7]||0)));return i.call(t,o,l,a,s),t}function V(e){return e instanceof Date&&!isNaN(e.valueOf())}function z(e){return function(t,n){var r=e(t,n);return 1==r.length?"0"+r:r}}function B(e){return function(t,n){return e(t,n).split(" ")[0]}}function H(e,t,n){return new Intl.DateTimeFormat(t,n).format(e).replace(/[\u200e\u200f]/g,"")}function W(e){var t={hour:"2-digit",hour12:!1,timeZoneName:e};return function(e,n){var r=H(e,n,t);return r?r.substring(3):""}}function q(e,t){return e.hour12=t,e}function U(e,t){return function(){var n={};return n[e]=2===t?"2-digit":"numeric",n}()}function G(e,t){var n={};return n[e]=t<4?t>1?"short":"narrow":"long",n}function K(e){return e.reduce(function(e,t){return Object(oe.__assign)({},e,t)},{})}function $(e){return function(t,n){return H(t,n,e)}}function Z(e){return e instanceof Date&&!isNaN(e.valueOf())}function Q(e,t,n,r,i){void 0===i&&(i=null);var o,l={str:null},a=g(t,n);if("string"!=typeof e||isNaN(+e-parseFloat(e))){if("number"!=typeof e)return l.error=e+" is not a number",l;o=e}else o=+e;n===ge.Percent&&(o*=100);var s=Math.abs(o)+"",u=function(e,t){void 0===t&&(t="-");var n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},r=e.split(ut),i=r[0],o=r[1],l=-1!==i.indexOf(at)?i.split(at):[i.substring(0,i.lastIndexOf(st)+1),i.substring(i.lastIndexOf(st)+1)],a=l[0],s=l[1]||"";n.posPre=a.substr(0,a.indexOf(dt));for(var u=0;u<s.length;u++){var c=s.charAt(u);c===st?n.minFrac=n.maxFrac=u+1:c===dt?n.maxFrac=u+1:n.posSuf+=c}var d=a.split(ct);if(n.gSize=d[1]?d[1].length:0,n.lgSize=d[2]||d[1]?(d[2]||d[1]).length:0,o){var p=i.length-n.posPre.length-n.posSuf.length,f=o.indexOf(dt);n.negPre=o.substr(0,f).replace(/'/g,""),n.negSuf=o.substr(f+p).replace(/'/g,"")}else n.negPre=t+n.posPre,n.negSuf=n.posSuf;return n}(a,m(t,we.MinusSign)),c="",d=!1;if(isFinite(o)){var p=function(e){var t,n,r,i,o,l=0;for((n=e.indexOf(at))>-1&&(e=e.replace(at,"")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;e.charAt(r)===st;r++);if(r===(o=e.length))t=[0],n=1;else{for(o--;e.charAt(o)===st;)o--;for(n-=r,t=[],i=0;r<=o;r++,i++)t[i]=+e.charAt(r)}return n>lt&&(t=t.splice(0,lt-1),l=n-1,n=1),{digits:t,exponent:l,integerLen:n}}(s),f=u.minInt,h=u.minFrac,y=u.maxFrac;if(r){var v=r.match(ot);if(null===v)return l.error=r+" is not a valid digit info",l;var b=v[1],_=v[3],w=v[5];null!=b&&(f=Y(b)),null!=_&&(h=Y(_)),null!=w?y=Y(w):null!=_&&h>y&&(y=h)}!function(e,t,n){if(t>n)throw new Error("The minimum number of digits after fraction ("+t+") is higher than the maximum ("+n+").");var r=e.digits,i=r.length-e.integerLen,o=Math.min(Math.max(t,i),n),l=o+e.integerLen,a=r[l];if(l>0){r.splice(Math.max(e.integerLen,l));for(var s=l;s<r.length;s++)r[s]=0}else{i=Math.max(0,i),e.integerLen=1,r.length=Math.max(1,l=o+1),r[0]=0;for(var u=1;u<l;u++)r[u]=0}if(a>=5)if(l-1<0){for(var c=0;c>l;c--)r.unshift(0),e.integerLen++;r.unshift(1),e.integerLen++}else r[l-1]++;for(;i<Math.max(0,o);i++)r.push(0);var d=r.reduceRight(function(e,t,n,r){return t+=e,r[n]=t%10,Math.floor(t/10)},0);d&&(r.unshift(d),e.integerLen++)}(p,h,y);var x=p.digits,C=p.integerLen,E=p.exponent,S=[];for(d=x.every(function(e){return!e});C<f;C++)x.unshift(0);for(;C<0;C++)x.unshift(0);C>0?S=x.splice(C,x.length):(S=x,x=[0]);var O=[];for(x.length>=u.lgSize&&O.unshift(x.splice(-u.lgSize,x.length).join(""));x.length>u.gSize;)O.unshift(x.splice(-u.gSize,x.length).join(""));x.length&&O.unshift(x.join("")),c=O.join(m(t,i?we.CurrencyGroup:we.Group)),S.length&&(c+=m(t,i?we.CurrencyDecimal:we.Decimal)+S.join("")),E&&(c+=m(t,we.Exponential)+"+"+E)}else c=m(t,we.Infinity);return c=o<0&&!d?u.negPre+c+u.negSuf:u.posPre+c+u.posSuf,n===ge.Currency&&null!==i?(l.str=c.replace(pt,i).replace(pt,""),l):n===ge.Percent?(l.str=c.replace(new RegExp(ft,"g"),m(t,we.PercentSign)),l):(l.str=c,l)}function Y(e){var t=parseInt(e);if(isNaN(t))throw new Error("Invalid integer literal when parsing "+e);return t}function X(e,t,n,r,i,o,l){if(void 0===o&&(o=null),void 0===l&&(l=!1),null==n)return null;if("number"!=typeof(n="string"!=typeof n||isNaN(+n-parseFloat(n))?n:+n))throw F(e,n);var a,s,u;if(r!==ge.Currency&&(a=1,s=0,u=3),i){var c=i.match(ot);if(null===c)throw new Error(i+" is not a valid digit info for number pipes");null!=c[1]&&(a=Y(c[1])),null!=c[3]&&(s=Y(c[3])),null!=c[5]&&(u=Y(c[5]))}return Xe.format(n,t,r,{minimumIntegerDigits:a,minimumFractionDigits:s,maximumFractionDigits:u,currency:o,currencyAsSymbol:l})}function J(e){return null==e||""===e||e!=e}function ee(e){return e===Ft}function te(e){return e===jt}function ne(e){return e===Vt}function re(e){return e===zt}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"NgLocaleLocalization",function(){return Se}),n.d(t,"NgLocalization",function(){return Ee}),n.d(t,"registerLocaleData",function(){return i}),n.d(t,"Plural",function(){return ye}),n.d(t,"NumberFormatStyle",function(){return ge}),n.d(t,"FormStyle",function(){return ve}),n.d(t,"TranslationWidth",function(){return be}),n.d(t,"FormatWidth",function(){return _e}),n.d(t,"NumberSymbol",function(){return we}),n.d(t,"WeekDay",function(){return xe}),n.d(t,"getLocaleDayPeriods",function(){return l}),n.d(t,"getLocaleDayNames",function(){return a}),n.d(t,"getLocaleMonthNames",function(){return s}),n.d(t,"getLocaleId",function(){return o}),n.d(t,"getLocaleEraNames",function(){return u}),n.d(t,"getLocaleWeekEndRange",function(){return d}),n.d(t,"getLocaleFirstDayOfWeek",function(){return c}),n.d(t,"getLocaleDateFormat",function(){return p}),n.d(t,"getLocaleDateTimeFormat",function(){return h}),n.d(t,"getLocaleExtraDayPeriodRules",function(){return w}),n.d(t,"getLocaleExtraDayPeriods",function(){return x}),n.d(t,"getLocalePluralCase",function(){return b}),n.d(t,"getLocaleTimeFormat",function(){return f}),n.d(t,"getLocaleNumberSymbol",function(){return m}),n.d(t,"getLocaleNumberFormat",function(){return g}),n.d(t,"getLocaleCurrencyName",function(){return v}),n.d(t,"getLocaleCurrencySymbol",function(){return y}),n.d(t,"CURRENCIES",function(){return fe}),n.d(t,"\u0275parseCookieValue",function(){return k}),n.d(t,"CommonModule",function(){return Nt}),n.d(t,"DeprecatedI18NPipesModule",function(){return At}),n.d(t,"NgClass",function(){return Oe}),n.d(t,"NgForOf",function(){return De}),n.d(t,"NgForOfContext",function(){return ke}),n.d(t,"NgIf",function(){return Re}),n.d(t,"NgIfContext",function(){return Me}),n.d(t,"NgPlural",function(){return Fe}),n.d(t,"NgPluralCase",function(){return je}),n.d(t,"NgStyle",function(){return Ve}),n.d(t,"NgSwitch",function(){return Ne}),n.d(t,"NgSwitchCase",function(){return Ae}),n.d(t,"NgSwitchDefault",function(){return Le}),n.d(t,"NgTemplateOutlet",function(){return ze}),n.d(t,"NgComponentOutlet",function(){return Te}),n.d(t,"DOCUMENT",function(){return Lt}),n.d(t,"AsyncPipe",function(){return wt}),n.d(t,"DatePipe",function(){return Ye}),n.d(t,"I18nPluralPipe",function(){return Ot}),n.d(t,"I18nSelectPipe",function(){return Tt}),n.d(t,"JsonPipe",function(){return kt}),n.d(t,"LowerCasePipe",function(){return xt}),n.d(t,"CurrencyPipe",function(){return Rt}),n.d(t,"DecimalPipe",function(){return Dt}),n.d(t,"PercentPipe",function(){return It}),n.d(t,"SlicePipe",function(){return Mt}),n.d(t,"UpperCasePipe",function(){return Et}),n.d(t,"TitleCasePipe",function(){return Ct}),n.d(t,"DeprecatedDatePipe",function(){return it}),n.d(t,"DeprecatedCurrencyPipe",function(){return gt}),n.d(t,"DeprecatedDecimalPipe",function(){return ht}),n.d(t,"DeprecatedPercentPipe",function(){return mt}),n.d(t,"\u0275PLATFORM_BROWSER_ID",function(){return Ft}),n.d(t,"\u0275PLATFORM_SERVER_ID",function(){return jt}),n.d(t,"\u0275PLATFORM_WORKER_APP_ID",function(){return Vt}),n.d(t,"\u0275PLATFORM_WORKER_UI_ID",function(){return zt}),n.d(t,"isPlatformBrowser",function(){return ee}),n.d(t,"isPlatformServer",function(){return te}),n.d(t,"isPlatformWorkerApp",function(){return ne}),n.d(t,"isPlatformWorkerUi",function(){return re}),n.d(t,"VERSION",function(){return Bt}),n.d(t,"PlatformLocation",function(){return le}),n.d(t,"LOCATION_INITIALIZED",function(){return ae}),n.d(t,"LocationStrategy",function(){return se}),n.d(t,"APP_BASE_HREF",function(){return ue}),n.d(t,"HashLocationStrategy",function(){return de}),n.d(t,"PathLocationStrategy",function(){return pe}),n.d(t,"Location",function(){return ce}),n.d(t,"\u0275e",function(){return Be}),n.d(t,"\u0275d",function(){return S}),n.d(t,"\u0275a",function(){return Ce}),n.d(t,"\u0275b",function(){return T}),n.d(t,"\u0275g",function(){return yt}),n.d(t,"\u0275f",function(){return Pt});var ie=n("LMZF"),oe=n("6Xbx"),le=function(){},ae=new ie.InjectionToken("Location Initialized"),se=function(){},ue=new ie.InjectionToken("appBaseHref"),ce=function(){function e(t){var n=this;this._subject=new ie.EventEmitter,this._platformStrategy=t;var i=this._platformStrategy.getBaseHref();this._baseHref=e.stripTrailingSlash(r(i)),this._platformStrategy.onPopState(function(e){n._subject.emit({url:n.path(!0),pop:!0,type:e.type})})}return e.prototype.path=function(e){return void 0===e&&(e=!1),this.normalize(this._platformStrategy.path(e))},e.prototype.isCurrentPathEqualTo=function(t,n){return void 0===n&&(n=""),this.path()==this.normalize(t+e.normalizeQueryParams(n))},e.prototype.normalize=function(t){return e.stripTrailingSlash(function(e,t){return e&&t.startsWith(e)?t.substring(e.length):t}(this._baseHref,r(t)))},e.prototype.prepareExternalUrl=function(e){return e&&"/"!==e[0]&&(e="/"+e),this._platformStrategy.prepareExternalUrl(e)},e.prototype.go=function(e,t){void 0===t&&(t=""),this._platformStrategy.pushState(null,"",e,t)},e.prototype.replaceState=function(e,t){void 0===t&&(t=""),this._platformStrategy.replaceState(null,"",e,t)},e.prototype.forward=function(){this._platformStrategy.forward()},e.prototype.back=function(){this._platformStrategy.back()},e.prototype.subscribe=function(e,t,n){return this._subject.subscribe({next:e,error:t,complete:n})},e.normalizeQueryParams=function(e){return e&&"?"!==e[0]?"?"+e:e},e.joinWithSlash=function(e,t){if(0==e.length)return t;if(0==t.length)return e;var n=0;return e.endsWith("/")&&n++,t.startsWith("/")&&n++,2==n?e+t.substring(1):1==n?e+t:e+"/"+t},e.stripTrailingSlash=function(e){var t=e.match(/#|\?|$/),n=t&&t.index||e.length;return e.slice(0,n-("/"===e[n-1]?1:0))+e.slice(n)},e}(),de=function(e){function t(t,n){var r=e.call(this)||this;return r._platformLocation=t,r._baseHref="",null!=n&&(r._baseHref=n),r}return Object(oe.__extends)(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.hash;return null==t&&(t="#"),t.length>0?t.substring(1):t},t.prototype.prepareExternalUrl=function(e){var t=ce.joinWithSlash(this._baseHref,e);return t.length>0?"#"+t:t},t.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(e,t,i)},t.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(e,t,i)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(se),pe=function(e){function t(t,n){var r=e.call(this)||this;if(r._platformLocation=t,null==n&&(n=r._platformLocation.getBaseHrefFromDOM()),null==n)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");return r._baseHref=n,r}return Object(oe.__extends)(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.prepareExternalUrl=function(e){return ce.joinWithSlash(this._baseHref,e)},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.pathname+ce.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?""+t+n:t},t.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));this._platformLocation.pushState(e,t,i)},t.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));this._platformLocation.replaceState(e,t,i)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(se),fe={AOA:[,"Kz"],ARS:[,"$"],AUD:["A$","$"],BAM:[,"KM"],BBD:[,"$"],BDT:[,"\u09f3"],BMD:[,"$"],BND:[,"$"],BOB:[,"Bs"],BRL:["R$"],BSD:[,"$"],BWP:[,"P"],BYN:[,"\u0440."],BZD:[,"$"],CAD:["CA$","$"],CLP:[,"$"],CNY:["CN\xa5","\xa5"],COP:[,"$"],CRC:[,"\u20a1"],CUC:[,"$"],CUP:[,"$"],CZK:[,"K\u010d"],DKK:[,"kr"],DOP:[,"$"],EGP:[,"E\xa3"],ESP:[,"\u20a7"],EUR:["\u20ac"],FJD:[,"$"],FKP:[,"\xa3"],GBP:["\xa3"],GEL:[,"\u20be"],GIP:[,"\xa3"],GNF:[,"FG"],GTQ:[,"Q"],GYD:[,"$"],HKD:["HK$","$"],HNL:[,"L"],HRK:[,"kn"],HUF:[,"Ft"],IDR:[,"Rp"],ILS:["\u20aa"],INR:["\u20b9"],ISK:[,"kr"],JMD:[,"$"],JPY:["\xa5"],KHR:[,"\u17db"],KMF:[,"CF"],KPW:[,"\u20a9"],KRW:["\u20a9"],KYD:[,"$"],KZT:[,"\u20b8"],LAK:[,"\u20ad"],LBP:[,"L\xa3"],LKR:[,"Rs"],LRD:[,"$"],LTL:[,"Lt"],LVL:[,"Ls"],MGA:[,"Ar"],MMK:[,"K"],MNT:[,"\u20ae"],MUR:[,"Rs"],MXN:["MX$","$"],MYR:[,"RM"],NAD:[,"$"],NGN:[,"\u20a6"],NIO:[,"C$"],NOK:[,"kr"],NPR:[,"Rs"],NZD:["NZ$","$"],PHP:[,"\u20b1"],PKR:[,"Rs"],PLN:[,"z\u0142"],PYG:[,"\u20b2"],RON:[,"lei"],RUB:[,"\u20bd"],RUR:[,"\u0440."],RWF:[,"RF"],SBD:[,"$"],SEK:[,"kr"],SGD:[,"$"],SHP:[,"\xa3"],SRD:[,"$"],SSP:[,"\xa3"],STD:[,"Db"],SYP:[,"\xa3"],THB:[,"\u0e3f"],TOP:[,"T$"],TRY:[,"\u20ba"],TTD:[,"$"],TWD:["NT$","$"],UAH:[,"\u20b4"],USD:["$"],UYU:[,"$"],VEF:[,"Bs"],VND:["\u20ab"],XAF:["FCFA"],XCD:["EC$","$"],XOF:["CFA"],XPF:["CFPF"],ZAR:[,"R"],ZMW:[,"ZK"]},he=["en",[["a","p"],["AM","PM"]],[["AM","PM"],,],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",,"{1} 'at' {0}"],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"$","US Dollar",function(e){var t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,"").length;return 1===t&&0===n?1:5}],me={},ge=function(){var e={Decimal:0,Percent:1,Currency:2,Scientific:3};return e[e.Decimal]="Decimal",e[e.Percent]="Percent",e[e.Currency]="Currency",e[e.Scientific]="Scientific",e}(),ye=function(){var e={Zero:0,One:1,Two:2,Few:3,Many:4,Other:5};return e[e.Zero]="Zero",e[e.One]="One",e[e.Two]="Two",e[e.Few]="Few",e[e.Many]="Many",e[e.Other]="Other",e}(),ve=function(){var e={Format:0,Standalone:1};return e[e.Format]="Format",e[e.Standalone]="Standalone",e}(),be=function(){var e={Narrow:0,Abbreviated:1,Wide:2,Short:3};return e[e.Narrow]="Narrow",e[e.Abbreviated]="Abbreviated",e[e.Wide]="Wide",e[e.Short]="Short",e}(),_e=function(){var e={Short:0,Medium:1,Long:2,Full:3};return e[e.Short]="Short",e[e.Medium]="Medium",e[e.Long]="Long",e[e.Full]="Full",e}(),we=function(){var e={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};return e[e.Decimal]="Decimal",e[e.Group]="Group",e[e.List]="List",e[e.PercentSign]="PercentSign",e[e.PlusSign]="PlusSign",e[e.MinusSign]="MinusSign",e[e.Exponential]="Exponential",e[e.SuperscriptingExponent]="SuperscriptingExponent",e[e.PerMille]="PerMille",e[e.Infinity]="Infinity",e[e.NaN]="NaN",e[e.TimeSeparator]="TimeSeparator",e[e.CurrencyDecimal]="CurrencyDecimal",e[e.CurrencyGroup]="CurrencyGroup",e}(),xe=function(){var e={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6};return e[e.Sunday]="Sunday",e[e.Monday]="Monday",e[e.Tuesday]="Tuesday",e[e.Wednesday]="Wednesday",e[e.Thursday]="Thursday",e[e.Friday]="Friday",e[e.Saturday]="Saturday",e}(),Ce=new ie.InjectionToken("UseV4Plurals"),Ee=function(){},Se=function(e){function t(t,n){var r=e.call(this)||this;return r.locale=t,r.deprecatedPluralFn=n,r}return Object(oe.__extends)(t,e),t.prototype.getPluralCategory=function(e,t){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(t||this.locale,e):b(t||this.locale)(e)){case ye.Zero:return"zero";case ye.One:return"one";case ye.Two:return"two";case ye.Few:return"few";case ye.Many:return"many";default:return"other"}},t}(Ee),Oe=function(){function e(e,t,n,r){this._iterableDiffers=e,this._keyValueDiffers=t,this._ngEl=n,this._renderer=r,this._initialClasses=[]}return Object.defineProperty(e.prototype,"klass",{set:function(e){this._applyInitialClasses(!0),this._initialClasses="string"==typeof e?e.split(/\s+/):[],this._applyInitialClasses(!1),this._applyClasses(this._rawClass,!1)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClass",{set:function(e){this._cleanupClasses(this._rawClass),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof e?e.split(/\s+/):e,this._rawClass&&(Object(ie["\u0275isListLikeIterable"])(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._iterableDiffer){var e=this._iterableDiffer.diff(this._rawClass);e&&this._applyIterableChanges(e)}else if(this._keyValueDiffer){var t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}},e.prototype._cleanupClasses=function(e){this._applyClasses(e,!0),this._applyInitialClasses(!1)},e.prototype._applyKeyValueChanges=function(e){var t=this;e.forEachAddedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachRemovedItem(function(e){e.previousValue&&t._toggleClass(e.key,!1)})},e.prototype._applyIterableChanges=function(e){var t=this;e.forEachAddedItem(function(e){if("string"!=typeof e.item)throw new Error("NgClass can only toggle CSS classes expressed as strings, got "+Object(ie["\u0275stringify"])(e.item));t._toggleClass(e.item,!0)}),e.forEachRemovedItem(function(e){return t._toggleClass(e.item,!1)})},e.prototype._applyInitialClasses=function(e){var t=this;this._initialClasses.forEach(function(n){return t._toggleClass(n,!e)})},e.prototype._applyClasses=function(e,t){var n=this;e&&(Array.isArray(e)||e instanceof Set?e.forEach(function(e){return n._toggleClass(e,!t)}):Object.keys(e).forEach(function(r){null!=e[r]&&n._toggleClass(r,!t)}))},e.prototype._toggleClass=function(e,t){var n=this;(e=e.trim())&&e.split(/\s+/g).forEach(function(e){t?n._renderer.addClass(n._ngEl.nativeElement,e):n._renderer.removeClass(n._ngEl.nativeElement,e)})},e}(),Te=function(){function e(e){this._viewContainerRef=e,this._componentRef=null,this._moduleRef=null}return e.prototype.ngOnChanges=function(e){if(this._viewContainerRef.clear(),this._componentRef=null,this.ngComponentOutlet){var t=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;if(e.ngComponentOutletNgModuleFactory)if(this._moduleRef&&this._moduleRef.destroy(),this.ngComponentOutletNgModuleFactory){var n=t.get(ie.NgModuleRef);this._moduleRef=this.ngComponentOutletNgModuleFactory.create(n.injector)}else this._moduleRef=null;var r=(this._moduleRef?this._moduleRef.componentFactoryResolver:t.get(ie.ComponentFactoryResolver)).resolveComponentFactory(this.ngComponentOutlet);this._componentRef=this._viewContainerRef.createComponent(r,this._viewContainerRef.length,t,this.ngComponentOutletContent)}},e.prototype.ngOnDestroy=function(){this._moduleRef&&this._moduleRef.destroy()},e}(),ke=function(){function e(e,t,n,r){this.$implicit=e,this.ngForOf=t,this.index=n,this.count=r}return Object.defineProperty(e.prototype,"first",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"even",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"odd",{get:function(){return!this.even},enumerable:!0,configurable:!0}),e}(),De=function(){function e(e,t,n){this._viewContainer=e,this._template=t,this._differs=n,this._differ=null}return Object.defineProperty(e.prototype,"ngForTrackBy",{get:function(){return this._trackByFn},set:function(e){Object(ie.isDevMode)()&&null!=e&&"function"!=typeof e&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(e)+". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information."),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngForTemplate",{set:function(e){e&&(this._template=e)},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(e){if("ngForOf"in e){var t=e.ngForOf.currentValue;if(!this._differ&&t)try{this._differ=this._differs.find(t).create(this.ngForTrackBy)}catch(e){throw new Error("Cannot find a differ supporting object '"+t+"' of type '"+(t.name||typeof t)+"'. NgFor only supports binding to Iterables such as Arrays.")}}},e.prototype.ngDoCheck=function(){if(this._differ){var e=this._differ.diff(this.ngForOf);e&&this._applyChanges(e)}},e.prototype._applyChanges=function(e){var t=this,n=[];e.forEachOperation(function(e,r,i){if(null==e.previousIndex){var o=t._viewContainer.createEmbeddedView(t._template,new ke(null,t.ngForOf,-1,-1),i),l=new Ie(e,o);n.push(l)}else null==i?t._viewContainer.remove(r):(o=t._viewContainer.get(r),t._viewContainer.move(o,i),l=new Ie(e,o),n.push(l))});for(var r=0;r<n.length;r++)this._perViewChange(n[r].view,n[r].record);r=0;for(var i=this._viewContainer.length;r<i;r++){var o=this._viewContainer.get(r);o.context.index=r,o.context.count=i}e.forEachIdentityChange(function(e){t._viewContainer.get(e.currentIndex).context.$implicit=e.item})},e.prototype._perViewChange=function(e,t){e.context.$implicit=t.item},e}(),Ie=function(e,t){this.record=e,this.view=t},Re=function(){function e(e,t){this._viewContainer=e,this._context=new Me,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=t}return Object.defineProperty(e.prototype,"ngIf",{set:function(e){this._context.$implicit=this._context.ngIf=e,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngIfThen",{set:function(e){this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngIfElse",{set:function(e){this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),e.prototype._updateView=function(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))},e}(),Me=function(){this.$implicit=null,this.ngIf=null},Pe=function(){function e(e,t){this._viewContainerRef=e,this._templateRef=t,this._created=!1}return e.prototype.create=function(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)},e.prototype.destroy=function(){this._created=!1,this._viewContainerRef.clear()},e.prototype.enforceState=function(e){e&&!this._created?this.create():!e&&this._created&&this.destroy()},e}(),Ne=function(){function e(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}return Object.defineProperty(e.prototype,"ngSwitch",{set:function(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)},enumerable:!0,configurable:!0}),e.prototype._addCase=function(){return this._caseCount++},e.prototype._addDefault=function(e){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(e)},e.prototype._matchCase=function(e){var t=e==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||t,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),t},e.prototype._updateDefaultCases=function(e){if(this._defaultViews&&e!==this._defaultUsed){this._defaultUsed=e;for(var t=0;t<this._defaultViews.length;t++)this._defaultViews[t].enforceState(e)}},e}(),Ae=function(){function e(e,t,n){this.ngSwitch=n,n._addCase(),this._view=new Pe(e,t)}return e.prototype.ngDoCheck=function(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))},e}(),Le=function(){return function(e,t,n){n._addDefault(new Pe(e,t))}}(),Fe=function(){function e(e){this._localization=e,this._caseViews={}}return Object.defineProperty(e.prototype,"ngPlural",{set:function(e){this._switchValue=e,this._updateView()},enumerable:!0,configurable:!0}),e.prototype.addCase=function(e,t){this._caseViews[e]=t},e.prototype._updateView=function(){this._clearViews();var e=Object.keys(this._caseViews),t=O(this._switchValue,e,this._localization);this._activateView(this._caseViews[t])},e.prototype._clearViews=function(){this._activeView&&this._activeView.destroy()},e.prototype._activateView=function(e){e&&(this._activeView=e,this._activeView.create())},e}(),je=function(){return function(e,t,n,r){this.value=e;var i=!isNaN(Number(e));r.addCase(i?"="+e:e,new Pe(n,t))}}(),Ve=function(){function e(e,t,n){this._differs=e,this._ngEl=t,this._renderer=n}return Object.defineProperty(e.prototype,"ngStyle",{set:function(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._differ){var e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}},e.prototype._applyChanges=function(e){var t=this;e.forEachRemovedItem(function(e){return t._setStyle(e.key,null)}),e.forEachAddedItem(function(e){return t._setStyle(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._setStyle(e.key,e.currentValue)})},e.prototype._setStyle=function(e,t){var n=e.split("."),r=n[1];this._renderer.setStyle(this._ngEl.nativeElement,n[0],t=null!=t&&r?""+t+r:t)},e}(),ze=function(){function e(e){this._viewContainerRef=e}return e.prototype.ngOnChanges=function(e){this._shouldRecreateView(e)?(this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this.ngTemplateOutlet&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext))):this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)},e.prototype._shouldRecreateView=function(e){var t=e.ngTemplateOutletContext;return!!e.ngTemplateOutlet||t&&this._hasContextShapeChanged(t)},e.prototype._hasContextShapeChanged=function(e){var t=Object.keys(e.previousValue||{}),n=Object.keys(e.currentValue||{});if(t.length===n.length){for(var r=0,i=n;r<i.length;r++)if(-1===t.indexOf(i[r]))return!0;return!1}return!0},e.prototype._updateExistingContext=function(e){for(var t=0,n=Object.keys(e);t<n.length;t++){var r=n[t];this._viewRef.context[r]=this.ngTemplateOutletContext[r]}},e}(),Be=[Oe,Te,De,Re,ze,Ve,Ne,Ae,Le,Fe,je],He={},We=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,qe=function(){var e={Short:0,ShortGMT:1,Long:2,Extended:3};return e[e.Short]="Short",e[e.ShortGMT]="ShortGMT",e[e.Long]="Long",e[e.Extended]="Extended",e}(),Ue=function(){var e={FullYear:0,Month:1,Date:2,Hours:3,Minutes:4,Seconds:5,Milliseconds:6,Day:7};return e[e.FullYear]="FullYear",e[e.Month]="Month",e[e.Date]="Date",e[e.Hours]="Hours",e[e.Minutes]="Minutes",e[e.Seconds]="Seconds",e[e.Milliseconds]="Milliseconds",e[e.Day]="Day",e}(),Ge=function(){var e={DayPeriods:0,Days:1,Months:2,Eras:3};return e[e.DayPeriods]="DayPeriods",e[e.Days]="Days",e[e.Months]="Months",e[e.Eras]="Eras",e}(),Ke=0,$e=4,Ze={},Qe=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Ye=function(){function e(e){this.locale=e}return e.prototype.transform=function(t,n,r,i){if(void 0===n&&(n="mediumDate"),null==t||""===t||t!=t)return null;"string"==typeof t&&(t=t.trim());var o;if(V(t))o=t;else if(isNaN(t-parseFloat(t)))if("string"==typeof t&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){var l=t.split("-").map(function(e){return+e}),a=l[0],s=l[1],u=l[2];o=new Date(a,s-1,u)}else o=new Date(t);else o=new Date(parseFloat(t));if(!V(o)){var c=void 0;if("string"!=typeof t||!(c=t.match(Qe)))throw F(e,t);o=j(c)}return function(e,t,n,r){t=D(n,t)||t;for(var i,o=[];t;){if(!(i=We.exec(t))){o.push(t);break}var l=(o=o.concat(i.slice(1))).pop();if(!l)break;t=l}var a=e.getTimezoneOffset();r&&(a=L(r,a),e=function(e,t,n){var r=e.getTimezoneOffset();return function(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}(e,-1*(L(t,r)-r))}(e,r));var s="";return o.forEach(function(t){var r=function(e){if(Ze[e])return Ze[e];var t;switch(e){case"G":case"GG":case"GGG":t=P(Ge.Eras,be.Abbreviated);break;case"GGGG":t=P(Ge.Eras,be.Wide);break;case"GGGGG":t=P(Ge.Eras,be.Narrow);break;case"y":t=M(Ue.FullYear,1,0,!1,!0);break;case"yy":t=M(Ue.FullYear,2,0,!0,!0);break;case"yyy":t=M(Ue.FullYear,3,0,!1,!0);break;case"yyyy":t=M(Ue.FullYear,4,0,!1,!0);break;case"M":case"L":t=M(Ue.Month,1,1);break;case"MM":case"LL":t=M(Ue.Month,2,1);break;case"MMM":t=P(Ge.Months,be.Abbreviated);break;case"MMMM":t=P(Ge.Months,be.Wide);break;case"MMMMM":t=P(Ge.Months,be.Narrow);break;case"LLL":t=P(Ge.Months,be.Abbreviated,ve.Standalone);break;case"LLLL":t=P(Ge.Months,be.Wide,ve.Standalone);break;case"LLLLL":t=P(Ge.Months,be.Narrow,ve.Standalone);break;case"w":t=A(1);break;case"ww":t=A(2);break;case"W":t=A(1,!0);break;case"d":t=M(Ue.Date,1);break;case"dd":t=M(Ue.Date,2);break;case"E":case"EE":case"EEE":t=P(Ge.Days,be.Abbreviated);break;case"EEEE":t=P(Ge.Days,be.Wide);break;case"EEEEE":t=P(Ge.Days,be.Narrow);break;case"EEEEEE":t=P(Ge.Days,be.Short);break;case"a":case"aa":case"aaa":t=P(Ge.DayPeriods,be.Abbreviated);break;case"aaaa":t=P(Ge.DayPeriods,be.Wide);break;case"aaaaa":t=P(Ge.DayPeriods,be.Narrow);break;case"b":case"bb":case"bbb":t=P(Ge.DayPeriods,be.Abbreviated,ve.Standalone,!0);break;case"bbbb":t=P(Ge.DayPeriods,be.Wide,ve.Standalone,!0);break;case"bbbbb":t=P(Ge.DayPeriods,be.Narrow,ve.Standalone,!0);break;case"B":case"BB":case"BBB":t=P(Ge.DayPeriods,be.Abbreviated,ve.Format,!0);break;case"BBBB":t=P(Ge.DayPeriods,be.Wide,ve.Format,!0);break;case"BBBBB":t=P(Ge.DayPeriods,be.Narrow,ve.Format,!0);break;case"h":t=M(Ue.Hours,1,-12);break;case"hh":t=M(Ue.Hours,2,-12);break;case"H":t=M(Ue.Hours,1);break;case"HH":t=M(Ue.Hours,2);break;case"m":t=M(Ue.Minutes,1);break;case"mm":t=M(Ue.Minutes,2);break;case"s":t=M(Ue.Seconds,1);break;case"ss":t=M(Ue.Seconds,2);break;case"S":t=M(Ue.Milliseconds,1);break;case"SS":t=M(Ue.Milliseconds,2);break;case"SSS":t=M(Ue.Milliseconds,3);break;case"Z":case"ZZ":case"ZZZ":t=N(qe.Short);break;case"ZZZZZ":t=N(qe.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":t=N(qe.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":t=N(qe.Long);break;default:return null}return Ze[e]=t,t}(t);s+=r?r(e,n,a):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),s}(o,n,i||this.locale,r)},e}(),Xe=function(){function e(){}return e.format=function(e,t,n,r){void 0===r&&(r={});var i=r.currency,o=r.currencyAsSymbol,l=void 0!==o&&o,a={minimumIntegerDigits:r.minimumIntegerDigits,minimumFractionDigits:r.minimumFractionDigits,maximumFractionDigits:r.maximumFractionDigits,style:ge[n].toLowerCase()};return n==ge.Currency&&(a.currency="string"==typeof i?i:void 0,a.currencyDisplay=l?"symbol":"code"),new Intl.NumberFormat(t,a).format(e)},e}(),Je=/((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/,et={yMMMdjms:$(K([U("year",1),G("month",3),U("day",1),U("hour",1),U("minute",1),U("second",1)])),yMdjm:$(K([U("year",1),U("month",1),U("day",1),U("hour",1),U("minute",1)])),yMMMMEEEEd:$(K([U("year",1),G("month",4),G("weekday",4),U("day",1)])),yMMMMd:$(K([U("year",1),G("month",4),U("day",1)])),yMMMd:$(K([U("year",1),G("month",3),U("day",1)])),yMd:$(K([U("year",1),U("month",1),U("day",1)])),jms:$(K([U("hour",1),U("second",1),U("minute",1)])),jm:$(K([U("hour",1),U("minute",1)]))},tt={yyyy:$(U("year",4)),yy:$(U("year",2)),y:$(U("year",1)),MMMM:$(G("month",4)),MMM:$(G("month",3)),MM:$(U("month",2)),M:$(U("month",1)),LLLL:$(G("month",4)),L:$(G("month",1)),dd:$(U("day",2)),d:$(U("day",1)),HH:z(B($(q(U("hour",2),!1)))),H:B($(q(U("hour",1),!1))),hh:z(B($(q(U("hour",2),!0)))),h:B($(q(U("hour",1),!0))),jj:$(U("hour",2)),j:$(U("hour",1)),mm:z($(U("minute",2))),m:$(U("minute",1)),ss:z($(U("second",2))),s:$(U("second",1)),sss:$(U("second",3)),EEEE:$(G("weekday",4)),EEE:$(G("weekday",3)),EE:$(G("weekday",2)),E:$(G("weekday",1)),a:function(e){return function(t,n){return e(t,n).split(" ")[1]}}($(q(U("hour",1),!0))),Z:W("short"),z:W("long"),ww:$({}),w:$({}),G:$(G("era",1)),GG:$(G("era",2)),GGG:$(G("era",3)),GGGG:$(G("era",4))},nt=new Map,rt=function(){function e(){}return e.format=function(e,t,n){return function(e,t,n){var r=et[e];if(r)return r(t,n);var i=e,o=nt.get(i);if(!o){o=[];var l=void 0;Je.exec(e);for(var a=e;a;)(l=Je.exec(a))?a=(o=o.concat(l.slice(1))).pop():(o.push(a),a=null);nt.set(i,o)}return o.reduce(function(e,r){var i=tt[r];return e+(i?i(t,n):"''"===r?"'":r.replace(/(^'|'$)/g,"").replace(/''/g,"'"))},"")}(n,e,t)},e}(),it=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n){if(void 0===n&&(n="mediumDate"),null==t||""===t||t!=t)return null;var r;if("string"==typeof t&&(t=t.trim()),Z(t))r=t;else if(isNaN(t-parseFloat(t)))if("string"==typeof t&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){var i=t.split("-").map(function(e){return parseInt(e,10)}),o=i[0],l=i[1],a=i[2];r=new Date(o,l-1,a)}else r=new Date(t);else r=new Date(parseFloat(t));if(!Z(r)){var s=void 0;if("string"!=typeof t||!(s=t.match(Qe)))throw F(e,t);r=j(s)}return rt.format(r,this._locale,e._ALIASES[n]||n)},e._ALIASES={medium:"yMMMdjms",short:"yMdjm",fullDate:"yMMMMEEEEd",longDate:"yMMMMd",mediumDate:"yMMMd",shortDate:"yMd",mediumTime:"jms",shortTime:"jm"},e}(),ot=/^(\d+)?\.((\d+)(-(\d+))?)?$/,lt=22,at=".",st="0",ut=";",ct=",",dt="#",pt="\xa4",ft="%",ht=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n){return X(e,this._locale,t,ge.Decimal,n)},e}(),mt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n){return X(e,this._locale,t,ge.Percent,n)},e}(),gt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r,i){return void 0===n&&(n="USD"),void 0===r&&(r=!1),X(e,this._locale,t,ge.Currency,i,n,r)},e}(),yt=[ht,mt,gt,it],vt=function(){function e(){}return e.prototype.createSubscription=function(e,t){return e.subscribe({next:t,error:function(e){throw e}})},e.prototype.dispose=function(e){e.unsubscribe()},e.prototype.onDestroy=function(e){e.unsubscribe()},e}(),bt=new(function(){function e(){}return e.prototype.createSubscription=function(e,t){return e.then(t,function(e){throw e})},e.prototype.dispose=function(e){},e.prototype.onDestroy=function(e){},e}()),_t=new vt,wt=function(){function e(e){this._ref=e,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}return e.prototype.ngOnDestroy=function(){this._subscription&&this._dispose()},e.prototype.transform=function(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue===this._latestReturnedValue?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,ie.WrappedValue.wrap(this._latestValue)):(e&&this._subscribe(e),this._latestReturnedValue=this._latestValue,this._latestValue)},e.prototype._subscribe=function(e){var t=this;this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,function(n){return t._updateLatestValue(e,n)})},e.prototype._selectStrategy=function(t){if(Object(ie["\u0275isPromise"])(t))return bt;if(Object(ie["\u0275isObservable"])(t))return _t;throw F(e,t)},e.prototype._dispose=function(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null},e.prototype._updateLatestValue=function(e,t){e===this._obj&&(this._latestValue=t,this._ref.markForCheck())},e}(),xt=function(){function e(){}return e.prototype.transform=function(t){if(!t)return t;if("string"!=typeof t)throw F(e,t);return t.toLowerCase()},e}(),Ct=function(){function e(){}return e.prototype.transform=function(t){if(!t)return t;if("string"!=typeof t)throw F(e,t);return t.split(/\b/g).map(function(e){return function(e){return e?e[0].toUpperCase()+e.substr(1).toLowerCase():e}(e)}).join("")},e}(),Et=function(){function e(){}return e.prototype.transform=function(t){if(!t)return t;if("string"!=typeof t)throw F(e,t);return t.toUpperCase()},e}(),St=/#/g,Ot=function(){function e(e){this._localization=e}return e.prototype.transform=function(t,n,r){if(null==t)return"";if("object"!=typeof n||null===n)throw F(e,n);return n[O(t,Object.keys(n),this._localization,r)].replace(St,t.toString())},e}(),Tt=function(){function e(){}return e.prototype.transform=function(t,n){if(null==t)return"";if("object"!=typeof n||"string"!=typeof t)throw F(e,n);return n.hasOwnProperty(t)?n[t]:n.hasOwnProperty("other")?n.other:""},e}(),kt=function(){function e(){}return e.prototype.transform=function(e){return JSON.stringify(e,null,2)},e}(),Dt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r){if(J(t))return null;var i=Q(t,r=r||this._locale,ge.Decimal,n),o=i.str,l=i.error;if(l)throw F(e,l);return o},e}(),It=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r){if(J(t))return null;var i=Q(t,r=r||this._locale,ge.Percent,n),o=i.str,l=i.error;if(l)throw F(e,l);return o},e}(),Rt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r,i,o){if(void 0===r&&(r="symbol"),J(t))return null;o=o||this._locale,"boolean"==typeof r&&(console&&console.warn&&console.warn('Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".'),r=r?"symbol":"code");var l=n||"USD";"code"!==r&&(l=function(e,t){var n=fe[l]||{},i=n[0]||l;return"wide"==("symbol"===r?"wide":"narrow")?i:n[1]||i}());var a=Q(t,o,ge.Currency,i,l),s=a.str,u=a.error;if(u)throw F(e,u);return s},e}(),Mt=function(){function e(){}return e.prototype.transform=function(t,n,r){if(null==t)return t;if(!this.supports(t))throw F(e,t);return t.slice(n,r)},e.prototype.supports=function(e){return"string"==typeof e||Array.isArray(e)},e}(),Pt=[wt,Et,xt,kt,Mt,Dt,It,Ct,Rt,Ye,Ot,Tt],Nt=function(){},At=function(){},Lt=new ie.InjectionToken("DocumentToken"),Ft="browser",jt="server",Vt="browserWorkerApp",zt="browserWorkerUi",Bt=new ie.Version("5.1.1")},Upor:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(){var t=e.call(this,"object unsubscribed");this.name=t.name="ObjectUnsubscribedError",this.stack=t.stack,this.message=t.message}return Object(r.__extends)(t,e),t}(Error)},"V+0c":function(e,t,n){e.exports=!n("umMR")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},V7AE:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("xIGM").a.Symbol,i="function"==typeof r&&"function"==typeof r.for?r.for("rxSubscriber"):"@@rxSubscriber"},VceJ:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"WGJ/":function(e,t,n){var r=n("p/bR");e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},Wo2w:function(e,t,n){var r=n("VceJ");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},WsSm:function(e,t,n){"use strict";var r=n("KGrn"),i=n("CDXM"),o=n("lfBE"),l=n("gxdV"),a=n("rMsi"),s=n("lexG"),u=n("9ScN"),c=n("P6IN"),d=n("TJLg"),p=n("3r0D")("iterator"),f=!([].keys&&"next"in[].keys()),h=function(){return this};e.exports=function(e,t,n,m,g,y,v){u(n,t,m);var b,_,w,x=function(e){if(!f&&e in O)return O[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",E="values"==g,S=!1,O=e.prototype,T=O[p]||O["@@iterator"]||g&&O[g],k=!f&&T||x(g),D=g?E?x("entries"):k:void 0,I="Array"==t?O.entries||T:T;if(I&&(w=d(I.call(new e)))!==Object.prototype&&w.next&&(c(w,C,!0),r||a(w,p)||l(w,p,h)),E&&T&&"values"!==T.name&&(S=!0,k=function(){return T.call(this)}),r&&!v||!f&&!S&&O[p]||l(O,p,k),s[t]=k,s[C]=h,g)if(b={values:E?k:x("values"),keys:y?k:x("keys"),entries:D},v)for(_ in b)_ in O||o(O,_,b[_]);else i(i.P+i.F*(f||S),t,b);return b}},Wy9r:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},"X0O/":function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=n("TJLg"),l=r.has,a=r.get,s=r.key,u=function(e,t,n){if(l(e,t,n))return a(e,t,n);var r=o(t);return null!==r?u(e,r,n):void 0};r.exp({getMetadata:function(e,t){return u(e,i(t),arguments.length<3?void 0:s(arguments[2]))}})},X3fp:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){var t=e.Symbol;if("function"==typeof t)return t.iterator||(t.iterator=t("iterator polyfill")),t.iterator;var n=e.Set;if(n&&"function"==typeof(new n)["@@iterator"])return"@@iterator";var r=e.Map;if(r)for(var i=Object.getOwnPropertyNames(r.prototype),o=0;o<i.length;++o){var l=i[o];if("entries"!==l&&"size"!==l&&r.prototype[l]===r.prototype.entries)return l}return"@@iterator"}(n("xIGM").a)},XRS9:function(e,t,n){"use strict";var r=n("pBmS"),i=n("xI8H").getWeak,o=n("+pQw"),l=n("JXkd"),a=n("Lcie"),s=n("p/bR"),u=n("BCYq"),c=n("rMsi"),d=n("Y5fy"),p=u(5),f=u(6),h=0,m=function(e){return e._l||(e._l=new g)},g=function(){this.a=[]},y=function(e,t){return p(e.a,function(e){return e[0]===t})};g.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=f(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,o){var u=e(function(e,r){a(e,u,t,"_i"),e._t=t,e._i=h++,e._l=void 0,void 0!=r&&s(r,n,e[o],e)});return r(u.prototype,{delete:function(e){if(!l(e))return!1;var n=i(e);return!0===n?m(d(this,t)).delete(e):n&&c(n,this._i)&&delete n[this._i]},has:function(e){if(!l(e))return!1;var n=i(e);return!0===n?m(d(this,t)).has(e):n&&c(n,this._i)}}),u},def:function(e,t,n){var r=i(o(t),!0);return!0===r?m(e).set(t,n):r[e._i]=n,e},ufstore:m}},Y5fy:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},YRqN:function(e,t,n){"use strict";t.b=function(e,t){return void 0===t&&(t=0),function(n){return n.lift(new l(e,t))}},n.d(t,"a",function(){return a});var r=n("6Xbx"),i=n("E9/g"),o=n("PAZ8"),l=function(){function e(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.scheduler,this.delay))},e}(),a=function(e){function t(t,n,r){void 0===r&&(r=0),e.call(this,t),this.scheduler=n,this.delay=r}return Object(r.__extends)(t,e),t.dispatch=function(e){e.notification.observe(e.destination),this.unsubscribe()},t.prototype.scheduleMessage=function(e){this.add(this.scheduler.schedule(t.dispatch,this.delay,new s(e,this.destination)))},t.prototype._next=function(e){this.scheduleMessage(o.a.createNext(e))},t.prototype._error=function(e){this.scheduleMessage(o.a.createError(e))},t.prototype._complete=function(){this.scheduleMessage(o.a.createComplete())},t}(i.a),s=function(e,t){this.notification=e,this.destination=t}},YuZA:function(e,t){function n(e){return Promise.resolve().then(function(){throw new Error("Cannot find module '"+e+"'.")})}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id="YuZA"},ZI9W:function(e,t,n){"use strict";var r=n("3LDD"),i=n("Y5fy");e.exports=n("cpZ/")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(i(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(i(this,"Map"),0===e?0:e,t)}},r,!0)},"a/Sk":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},a7b8:function(e,t,n){var r=n("JXkd"),i=n("rKhO"),o=n("3r0D")("species");e.exports=function(e){var t;return i(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!i(t.prototype)||(t=void 0),r(t)&&null===(t=t[o])&&(t=void 0)),void 0===t?Array:t}},b4gG:function(e,t){var n=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=n)},bbdN:function(e,t,n){var r,i=i||function(e){"use strict";if(!(void 0===e||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var t=function(){return e.URL||e.webkitURL||e},n=e.document.createElementNS("http://www.w3.org/1999/xhtml","a"),r="download"in n,i=/constructor/i.test(e.HTMLElement)||e.safari,o=/CriOS\/[\d]+/.test(navigator.userAgent),l=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},a=function(e){setTimeout(function(){"string"==typeof e?t().revokeObjectURL(e):e.remove()},4e4)},s=function(e){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e},u=function(u,c,d){d||(u=s(u));var p,f=this,h="application/octet-stream"===u.type,m=function(){!function(e,t,n){for(var r=(t=[].concat(t)).length;r--;){var i=e["on"+t[r]];if("function"==typeof i)try{i.call(e,e)}catch(e){l(e)}}}(f,"writestart progress write writeend".split(" "))};if(f.readyState=f.INIT,r)return p=t().createObjectURL(u),void setTimeout(function(){n.href=p,n.download=c,function(e){var t=new MouseEvent("click");e.dispatchEvent(t)}(n),m(),a(p),f.readyState=f.DONE});!function(){if((o||h&&i)&&e.FileReader){var n=new FileReader;return n.onloadend=function(){var t=o?n.result:n.result.replace(/^data:[^;]*;/,"data:attachment/file;");e.open(t,"_blank")||(e.location.href=t),t=void 0,f.readyState=f.DONE,m()},n.readAsDataURL(u),void(f.readyState=f.INIT)}p||(p=t().createObjectURL(u)),h?e.location.href=p:e.open(p,"_blank")||(e.location.href=p),f.readyState=f.DONE,m(),a(p)}()},c=u.prototype;return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t,n){return t=t||e.name||"download",n||(e=s(e)),navigator.msSaveOrOpenBlob(e,t)}:(c.abort=function(){},c.readyState=c.INIT=0,c.WRITING=1,c.DONE=2,c.error=c.onwritestart=c.onprogress=c.onwrite=c.onabort=c.onerror=c.onwriteend=null,function(e,t,n){return new u(e,t||e.name||"download",n)})}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content);void 0!==e&&e.exports?e.exports.saveAs=i:null!==n("MwgA")&&null!==n("f8Ud")&&(void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r))},bywS:function(e,t,n){"use strict";function r(e){return e}var i=n("wP3s");t.a=function(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),Object(i.a)(r,null,e)}},c09d:function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},cDNt:function(e,t,n){"use strict";function r(){if(null==ol)try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){return ol=!0}}))}finally{ol=ol||!1}return ol}function i(){if(ll)return ll;if("object"!=typeof document||!document)return ll=new Set(fl);var e=document.createElement("input");return ll=new Set(fl.filter(function(t){return e.setAttribute("type",t),e.type===t}))}function o(e,t){return void 0===t&&(t=Tl),function(e){return function(t){return t.lift(new Il(e))}}(function(){return Nl(e,t)})}function l(e,t,n){return e||new Fl(t,n)}function a(e,t,n){return e||new jl(t,n)}function s(){throw Error("Host already has a portal attached")}function u(e){return function(t){return 0===e?new Jl.a:t.lift(new ea(e))}}function c(e){return null!=e&&""+e!="false"}function d(e,t){return void 0===t&&(t=0),isNaN(parseFloat(e))||isNaN(Number(e))?t:Number(e)}function p(e){return Array.isArray(e)?e:[e]}function f(){return Error("Scroll strategy has already been attached.")}function h(e,t){return t.some(function(t){return e.bottom<t.top||e.top>t.bottom||e.right<t.left||e.left>t.right})}function m(e,t){return t.some(function(t){return e.top<t.top||e.bottom>t.bottom||e.left<t.left||e.right>t.right})}function g(e){return"string"==typeof e?e:e+"px"}function y(e,t){return e||new pa(t)}function v(e,t){return e||new fa(t)}function b(e){return function(){return e.scrollStrategies.reposition()}}function _(e,t){return void 0===t&&(t=Tl),function(n){return n.lift(new ba(e,t))}}function w(e){e.debouncedNext()}function x(e,t,n){return function(r){return r.lift(new xa(e,t,n))}}function C(e){if(!e.hasAttribute("tabindex")||void 0===e.tabIndex)return!1;var t=e.getAttribute("tabindex");return"-32768"!=t&&!(!t||isNaN(parseInt(t,10)))}function E(e){if(!C(e))return null;var t=parseInt(e.getAttribute("tabindex")||"",10);return isNaN(t)?-1:t}function S(e,t){return(e.getAttribute(t)||"").match(/\S+/g)||[]}function O(e,t){return e||new Pa(t)}function T(e,t,n){return e||new Aa(t,n)}function k(e,t,n){return e||new La(t,n)}function D(e){return function(e){function t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.apply(this,t)||this;return r._disabled=!1,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(e){this._disabled=c(e)},enumerable:!0,configurable:!0}),t}(e)}function I(e,t){return function(e){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=e.apply(this,n)||this;return i.color=t,i}return Object(bl.__extends)(n,e),Object.defineProperty(n.prototype,"color",{get:function(){return this._color},set:function(e){var n=e||t;n!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove("mat-"+this._color),n&&this._elementRef.nativeElement.classList.add("mat-"+n),this._color=n)},enumerable:!0,configurable:!0}),n}(e)}function R(e){return function(e){function t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.apply(this,t)||this;return r._disableRipple=!1,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"disableRipple",{get:function(){return this._disableRipple},set:function(e){this._disableRipple=c(e)},enumerable:!0,configurable:!0}),t}(e)}function M(e,t){for(var n=Array(e),r=0;r<e;r++)n[r]=t(r);return n}function P(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(t){var n=e[e.length-1];Object(Pl.a)(n)?e.pop():n=null;var r=e.length;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return 1===e.length||2===e.length&&Object(Pl.a)(e[1])?Ds(e[0]):Object(Is.a)(1)(vl.apply(void 0,e))}(1===r?new gs.a(e[0],n):r>1?new yl.a(e,n):new Jl.a(n),t)}}function N(){throw Error("Attempting to attach dialog content after content is already attached")}function A(e){return function(){return e.scrollStrategies.block()}}function L(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function F(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{_portalOutlet:0}),(e()(),al["\u0275and"](16777216,null,null,1,null,L)),al["\u0275did"](2,212992,[[1,4]],0,$l,[al.ComponentFactoryResolver,al.ViewContainerRef],{portal:[0,"portal"]},null)],function(e,t){e(t,2,0,"")},null)}function j(e){return function(t){var n=new Ys(e),r=t.lift(n);return n.caught=r}}function V(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}function z(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer}function B(e){return"undefined"!=typeof Blob&&e instanceof Blob}function H(e){return"undefined"!=typeof FormData&&e instanceof FormData}function W(e,t){return{body:t,headers:e.headers,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials}}function q(e,t){return void 0===t&&(t=[]),t?t.reduceRight(function(e,t){return new yu(e,t)},e):e}function U(e){return Error('Unable to find icon with the name "'+e+'"')}function G(e){return Error("The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was \""+e+'".')}function K(e,t,n){return e||new Nu(t,n)}function $(e){return e.cloneNode(!0)}function Z(e,t){return e+":"+t}function Q(e){return Error("A hint was already declared for 'align=\""+e+"\"'.")}function Y(e){return Error("MatDatepicker: No provider found for "+e+". You must import one of the following modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a custom implementation.")}function X(e){return function(){return e.scrollStrategies.reposition()}}function J(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","mat-button-wrapper"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](2,0,null,null,1,"div",[["class","mat-button-ripple mat-ripple"],["matRipple",""]],[[2,"mat-button-ripple-round",null],[2,"mat-ripple-unbounded",null]],null,null,null,null)),al["\u0275did"](3,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{trigger:[0,"trigger"],centered:[1,"centered"],disabled:[2,"disabled"]},null),(e()(),al["\u0275eld"](4,0,null,null,0,"div",[["class","mat-button-focus-overlay"]],null,null,null,null,null))],function(e,t){var n=t.component;e(t,3,0,n._getHostElement(),n._isIconButton,n._isRippleDisabled())},function(e,t){var n=t.component;e(t,2,0,n._isRoundButton||n._isIconButton,al["\u0275nov"](t,3).unbounded)})}function ee(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","mat-button-wrapper"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](2,0,null,null,1,"div",[["class","mat-button-ripple mat-ripple"],["matRipple",""]],[[2,"mat-button-ripple-round",null],[2,"mat-ripple-unbounded",null]],null,null,null,null)),al["\u0275did"](3,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{trigger:[0,"trigger"],centered:[1,"centered"],disabled:[2,"disabled"]},null),(e()(),al["\u0275eld"](4,0,null,null,0,"div",[["class","mat-button-focus-overlay"]],null,null,null,null,null))],function(e,t){var n=t.component;e(t,3,0,n._getHostElement(),n._isIconButton,n._isRippleDisabled())},function(e,t){var n=t.component;e(t,2,0,n._isRoundButton||n._isIconButton,al["\u0275nov"](t,3).unbounded)})}function te(e){return al["\u0275vid"](2,[al["\u0275ncd"](null,0)],null,null)}function ne(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-month-view",[],null,[[null,"selectedChange"],[null,"_userSelection"]],function(e,t,n){var r=!0,i=e.component;return"selectedChange"===t&&(r=!1!==i._dateSelected(n)&&r),"_userSelection"===t&&(r=!1!==i._userSelected()&&r),r},pe,uc)),al["\u0275did"](1,1097728,[[1,4]],0,Qu,[[2,Wa],[2,qa],al.ChangeDetectorRef],{activeDate:[0,"activeDate"],selected:[1,"selected"],dateFilter:[2,"dateFilter"]},{selectedChange:"selectedChange",_userSelection:"_userSelection"})],function(e,t){var n=t.component;e(t,1,0,n._activeDate,n.selected,n._dateFilterForViews)},null)}function re(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-year-view",[],null,[[null,"selectedChange"]],function(e,t,n){var r=!0;return"selectedChange"===t&&(r=!1!==e.component._monthSelected(n)&&r),r},fe,cc)),al["\u0275did"](1,1097728,[[2,4]],0,Yu,[[2,Wa],[2,qa],al.ChangeDetectorRef],{activeDate:[0,"activeDate"],selected:[1,"selected"],dateFilter:[2,"dateFilter"]},{selectedChange:"selectedChange"})],function(e,t){var n=t.component;e(t,1,0,n._activeDate,n.selected,n._dateFilterForViews)},null)}function ie(e){return al["\u0275vid"](2,[al["\u0275qud"](671088640,1,{monthView:0}),al["\u0275qud"](671088640,2,{yearView:0}),(e()(),al["\u0275eld"](2,0,null,null,13,"div",[["class","mat-calendar-header"]],null,null,null,null,null)),(e()(),al["\u0275eld"](3,0,null,null,12,"div",[["class","mat-calendar-controls"]],null,null,null,null,null)),(e()(),al["\u0275eld"](4,0,null,null,4,"button",[["class","mat-calendar-period-button mat-button"],["mat-button",""]],[[1,"aria-label",0],[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._currentPeriodClicked()&&r),r},J,nc)),al["\u0275did"](5,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](6,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](7,0,["",""])),(e()(),al["\u0275eld"](8,0,null,0,0,"div",[["class","mat-calendar-arrow"]],[[2,"mat-calendar-invert",null]],null,null,null,null)),(e()(),al["\u0275eld"](9,0,null,null,0,"div",[["class","mat-calendar-spacer"]],null,null,null,null,null)),(e()(),al["\u0275eld"](10,0,null,null,2,"button",[["class","mat-calendar-previous-button mat-icon-button"],["mat-icon-button",""]],[[1,"aria-label",0],[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._previousClicked()&&r),r},J,nc)),al["\u0275did"](11,180224,null,0,$s,[al.ElementRef,pl,La],{disabled:[0,"disabled"]},null),al["\u0275did"](12,16384,null,0,Ks,[],null,null),(e()(),al["\u0275eld"](13,0,null,null,2,"button",[["class","mat-calendar-next-button mat-icon-button"],["mat-icon-button",""]],[[1,"aria-label",0],[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._nextClicked()&&r),r},J,nc)),al["\u0275did"](14,180224,null,0,$s,[al.ElementRef,pl,La],{disabled:[0,"disabled"]},null),al["\u0275did"](15,16384,null,0,Ks,[],null,null),(e()(),al["\u0275eld"](16,0,null,null,6,"div",[["cdkMonitorSubtreeFocus",""],["class","mat-calendar-content"]],null,[[null,"keydown"]],function(e,t,n){var r=!0;return"keydown"===t&&(r=!1!==e.component._handleCalendarBodyKeydown(n)&&r),r},null,null)),al["\u0275did"](17,16384,null,0,cl.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),al["\u0275did"](18,147456,null,0,Fa,[al.ElementRef,La],null,null),(e()(),al["\u0275and"](16777216,null,null,1,null,ne)),al["\u0275did"](20,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,re)),al["\u0275did"](22,16384,null,0,cl.NgSwitchDefault,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],null,null)],function(e,t){var n=t.component;e(t,11,0,!n._previousEnabled()),e(t,14,0,!n._nextEnabled()),e(t,17,0,n._monthView),e(t,20,0,!0)},function(e,t){var n=t.component;e(t,4,0,n._periodButtonLabel,al["\u0275nov"](t,5).disabled||null),e(t,7,0,n._periodButtonText),e(t,8,0,!n._monthView),e(t,10,0,n._prevButtonLabel,al["\u0275nov"](t,11).disabled||null),e(t,13,0,n._nextButtonLabel,al["\u0275nov"](t,14).disabled||null)})}function oe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"tr",[["aria-hidden","true"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,1,"td",[["class","mat-calendar-body-label"]],[[1,"colspan",0],[4,"paddingTop","%"],[4,"paddingBottom","%"]],null,null,null,null)),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){var n=t.component;e(t,1,0,n.numCols,50*n.cellAspectRatio/n.numCols,50*n.cellAspectRatio/n.numCols),e(t,2,0,n.label)})}function le(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"td",[["aria-hidden","true"],["class","mat-calendar-body-label"]],[[1,"colspan",0],[4,"paddingTop","%"],[4,"paddingBottom","%"]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,n._firstRowOffset,50*n.cellAspectRatio/n.numCols,50*n.cellAspectRatio/n.numCols),e(t,1,0,n._firstRowOffset>=n.labelMinRequiredCells?n.label:"")})}function ae(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"td",[["class","mat-calendar-body-cell"],["role","gridcell"]],[[8,"tabIndex",0],[2,"mat-calendar-body-disabled",null],[2,"mat-calendar-body-active",null],[1,"aria-label",0],[1,"aria-disabled",0],[4,"width","%"],[4,"paddingTop","%"],[4,"paddingBottom","%"]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._cellClicked(e.context.$implicit)&&r),r},null,null)),(e()(),al["\u0275eld"](1,0,null,null,1,"div",[["class","mat-calendar-body-cell-content"]],[[2,"mat-calendar-body-selected",null],[2,"mat-calendar-body-today",null]],null,null,null,null)),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,n._isActiveCell(t.parent.context.index,t.context.index)?0:-1,!t.context.$implicit.enabled,n._isActiveCell(t.parent.context.index,t.context.index),t.context.$implicit.ariaLabel,!t.context.$implicit.enabled||null,100/n.numCols,50*n.cellAspectRatio/n.numCols,50*n.cellAspectRatio/n.numCols),e(t,1,0,n.selectedValue===t.context.$implicit.value,n.todayValue===t.context.$implicit.value),e(t,2,0,t.context.$implicit.displayValue)})}function se(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"tr",[["role","row"]],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,le)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,ae)),al["\u0275did"](4,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],function(e,t){e(t,2,0,0===t.context.index&&t.component._firstRowOffset),e(t,4,0,t.context.$implicit)},null)}function ue(e){return al["\u0275vid"](2,[(e()(),al["\u0275and"](16777216,null,null,1,null,oe)),al["\u0275did"](1,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,se)),al["\u0275did"](3,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],function(e,t){var n=t.component;e(t,1,0,n._firstRowOffset<n.labelMinRequiredCells),e(t,3,0,n.rows)},null)}function ce(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_calendar:0}),(e()(),al["\u0275eld"](1,0,null,null,3,"mat-calendar",[["cdkTrapFocus",""],["class","mat-calendar"]],[[8,"id",0]],[[null,"selectedChange"],[null,"_userSelection"]],function(e,t,n){var r=!0,i=e.component;return"selectedChange"===t&&(r=!1!==i.datepicker._select(n)&&r),"_userSelection"===t&&(r=!1!==i.datepicker.close()&&r),r},ie,oc)),al["\u0275did"](2,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](3,1196032,null,0,Ta,[al.ElementRef,Oa,cl.DOCUMENT],{enabled:[0,"enabled"]},null),al["\u0275did"](4,1753088,[[1,4]],0,Xu,[al.ElementRef,Ku,al.NgZone,[2,Wa],[2,qa],al.ChangeDetectorRef],{startAt:[0,"startAt"],startView:[1,"startView"],selected:[2,"selected"],minDate:[3,"minDate"],maxDate:[4,"maxDate"],dateFilter:[5,"dateFilter"]},{selectedChange:"selectedChange",_userSelection:"_userSelection"})],function(e,t){var n=t.component;e(t,2,0,n.datepicker.panelClass),e(t,3,0,""),e(t,4,0,n.datepicker.startAt,n.datepicker.startView,n.datepicker._selected,n.datepicker._minDate,n.datepicker._maxDate,n.datepicker._dateFilter)},function(e,t){e(t,1,0,t.component.datepicker.id)})}function de(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"th",[],[[1,"aria-label",0]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,0,0,t.context.$implicit.long),e(t,1,0,t.context.$implicit.narrow)})}function pe(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,8,"table",[["class","mat-calendar-table"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,5,"thead",[["class","mat-calendar-table-header"]],null,null,null,null,null)),(e()(),al["\u0275eld"](2,0,null,null,2,"tr",[],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,de)),al["\u0275did"](4,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275eld"](5,0,null,null,1,"tr",[],null,null,null,null,null)),(e()(),al["\u0275eld"](6,0,null,null,0,"th",[["aria-hidden","true"],["class","mat-calendar-table-header-divider"],["colspan","7"]],null,null,null,null,null)),(e()(),al["\u0275eld"](7,0,null,null,1,"tbody",[["class","mat-calendar-body"],["mat-calendar-body",""],["role","grid"]],null,[[null,"selectedValueChange"]],function(e,t,n){var r=!0;return"selectedValueChange"===t&&(r=!1!==e.component._dateSelected(n)&&r),r},ue,lc)),al["\u0275did"](8,49152,null,0,Zu,[],{label:[0,"label"],rows:[1,"rows"],todayValue:[2,"todayValue"],selectedValue:[3,"selectedValue"],labelMinRequiredCells:[4,"labelMinRequiredCells"],activeCell:[5,"activeCell"]},{selectedValueChange:"selectedValueChange"})],function(e,t){var n=t.component;e(t,4,0,n._weekdays),e(t,8,0,n._monthLabel,n._weeks,n._todayDate,n._selectedDate,3,n._dateAdapter.getDate(n.activeDate)-1)},null)}function fe(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,5,"table",[["class","mat-calendar-table"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,2,"thead",[["class","mat-calendar-table-header"]],null,null,null,null,null)),(e()(),al["\u0275eld"](2,0,null,null,1,"tr",[],null,null,null,null,null)),(e()(),al["\u0275eld"](3,0,null,null,0,"th",[["class","mat-calendar-table-header-divider"],["colspan","4"]],null,null,null,null,null)),(e()(),al["\u0275eld"](4,0,null,null,1,"tbody",[["allowDisabledSelection","true"],["class","mat-calendar-body"],["mat-calendar-body",""],["role","grid"]],null,[[null,"selectedValueChange"]],function(e,t,n){var r=!0;return"selectedValueChange"===t&&(r=!1!==e.component._monthSelected(n)&&r),r},ue,lc)),al["\u0275did"](5,49152,null,0,Zu,[],{label:[0,"label"],rows:[1,"rows"],todayValue:[2,"todayValue"],selectedValue:[3,"selectedValue"],labelMinRequiredCells:[4,"labelMinRequiredCells"],numCols:[5,"numCols"],allowDisabledSelection:[6,"allowDisabledSelection"],activeCell:[7,"activeCell"],cellAspectRatio:[8,"cellAspectRatio"]},{selectedValueChange:"selectedValueChange"})],function(e,t){var n=t.component;e(t,5,0,n._yearLabel,n._months,n._todayMonth,n._selectedMonth,2,4,"true",n._dateAdapter.getMonth(n.activeDate),4/7)},null)}function he(e){return function(){return e.scrollStrategies.reposition({scrollThrottle:dc})}}function me(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,2,"div",[["class","mat-tooltip"]],[[4,"transform-origin",null],[24,"@state",0]],[[null,"@state.start"],[null,"@state.done"]],function(e,t,n){var r=!0,i=e.component;return"@state.start"===t&&(r=!1!==i._animationStart()&&r),"@state.done"===t&&(r=!1!==i._animationDone(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](2,null,["",""]))],function(e,t){e(t,1,0,"mat-tooltip",t.component.tooltipClass)},function(e,t){var n=t.component;e(t,0,0,n._transformOrigin,n._visibility),e(t,2,0,n.message)})}function ge(e){return{matches:"all"===e||""===e,media:e,addListener:function(){},removeListener:function(){}}}function ye(e){return Object(bl.__assign)({},new Tc,e)}function ve(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function be(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_portalOutlet:0}),(e()(),al["\u0275and"](16777216,null,null,1,null,ve)),al["\u0275did"](2,212992,[[1,4]],0,$l,[al.ComponentFactoryResolver,al.ViewContainerRef],{portal:[0,"portal"]},null)],function(e,t){e(t,2,0,"")},null)}function _e(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"button",[["class","mat-simple-snackbar-action"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.action()&&r),r},null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.data.action)})}function we(e){return al["\u0275vid"](2,[(e()(),al["\u0275ted"](0,null,[""," "])),(e()(),al["\u0275and"](16777216,null,null,1,null,_e)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,2,0,t.component.hasAction)},function(e,t){e(t,0,0,t.component.data.message)})}function xe(e){return e||new Vc}function Ce(e){return Error('Could not find column with id "'+e+'".')}function Ee(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_rowPlaceholder:0}),al["\u0275qud"](402653184,2,{_headerRowPlaceholder:0}),(e()(),al["\u0275eld"](2,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](3,16384,[[2,4]],0,Zc,[al.ViewContainerRef],null,null),(e()(),al["\u0275eld"](4,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](5,16384,[[1,4]],0,$c,[al.ViewContainerRef],null,null)],null,null)}function Se(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](1,16384,null,0,qc,[al.ViewContainerRef],null,null)],null,null)}function Oe(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](1,16384,null,0,qc,[al.ViewContainerRef],null,null)],null,null)}function Te(e){return al["\u0275vid"](2,[al["\u0275ncd"](null,0),al["\u0275ncd"](null,1)],null,null)}function ke(e){return al["\u0275vid"](2,[al["\u0275ncd"](null,0),al["\u0275ncd"](null,1)],null,null)}function De(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{hostMetadata:0}),(e()(),al["\u0275eld"](1,0,[[1,0],["hostMetadata",1]],null,0,"textarea",[["class","textarea-metadata"]],null,null,null,null,null))],null,null)}function Ie(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,45,"mat-card",[["class","input-card mat-card"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","input-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","toolbar-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INPUT: SQL++"])),(e()(),al["\u0275ted"](-1,0,["\t\n            "])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](18,0,null,0,13,"mat-card-content",[["class","content-area mat-card-content"]],null,null,null,null,null)),al["\u0275did"](19,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](21,0,null,null,9,"div",[["class","codemirror-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n           "])),(e()(),al["\u0275eld"](23,0,null,null,6,"codemirror-metadata",[["class","code"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],function(e,t,n){var r=!0;return"ngModelChange"===t&&(r=!1!==(e.component.queryMetadataString=n)&&r),r},De,xd)),al["\u0275did"](24,4374528,null,0,wd,[],{config:[0,"config"]},null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[wd]),al["\u0275did"](26,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](28,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["  \n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](33,0,null,0,12,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](34,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](36,0,null,null,3,"button",[["class","query-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.executeQuery()&&r),r},J,nc)),al["\u0275did"](37,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](38,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["RUN"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](41,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](42,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](44,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,0,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,24,0,n.codemirrorMetadataConfig),e(t,26,0,n.queryMetadataString)},function(e,t){var n=t.component;e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length),e(t,23,0,al["\u0275nov"](t,28).ngClassUntouched,al["\u0275nov"](t,28).ngClassTouched,al["\u0275nov"](t,28).ngClassPristine,al["\u0275nov"](t,28).ngClassDirty,al["\u0275nov"](t,28).ngClassValid,al["\u0275nov"](t,28).ngClassInvalid,al["\u0275nov"](t,28).ngClassPending),e(t,33,0,"end"===al["\u0275nov"](t,34).align),e(t,36,0,al["\u0275nov"](t,37).disabled||null),e(t,42,0,n.errorMessage)})}function Re(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[["class","mat-input-prefix mat-form-field-prefix"]],null,null,null,null,null)),al["\u0275ncd"](null,0)],null,null)}function Me(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,null,null,null,null,null,null,null)),al["\u0275ncd"](null,2),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.component._control.placeholder)})}function Pe(e){return al["\u0275vid"](0,[al["\u0275ncd"](null,3),(e()(),al["\u0275and"](0,null,null,0))],null,null)}function Ne(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["aria-hidden","true"],["class","mat-placeholder-required mat-form-field-required-marker"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\xa0*"]))],null,null)}function Ae(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[[4,0],["label",1]],null,7,"label",[["class","mat-form-field-label mat-input-placeholder mat-form-field-placeholder"]],[[1,"for",0],[1,"aria-owns",0],[2,"mat-empty",null],[2,"mat-form-field-empty",null],[2,"mat-accent",null],[2,"mat-warn",null]],null,null,null,null)),al["\u0275did"](1,16384,null,0,cl.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Me)),al["\u0275did"](3,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Pe)),al["\u0275did"](5,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Ne)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null)],function(e,t){var n=t.component;e(t,1,0,n._hasLabel()),e(t,3,0,!1),e(t,5,0,!0),e(t,7,0,!n.hideRequiredMarker&&n._control.required)},function(e,t){var n=t.component;e(t,0,0,n._control.id,n._control.id,n._control.empty&&!n._shouldAlwaysFloat,n._control.empty&&!n._shouldAlwaysFloat,"accent"==n.color,"warn"==n.color)})}function Le(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[["class","mat-input-suffix mat-form-field-suffix"]],null,null,null,null,null)),al["\u0275ncd"](null,4)],null,null)}function Fe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[],[[24,"@transitionMessages",0]],null,null,null,null)),al["\u0275ncd"](null,5)],null,function(e,t){e(t,0,0,t.component._subscriptAnimationState)})}function je(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[["class","mat-hint"]],[[8,"id",0]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,n._hintLabelId),e(t,1,0,n.hintLabel)})}function Ve(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"div",[["class","mat-input-hint-wrapper mat-form-field-hint-wrapper"]],[[24,"@transitionMessages",0]],null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,je)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275ncd"](null,6),(e()(),al["\u0275eld"](4,0,null,null,0,"div",[["class","mat-input-hint-spacer mat-form-field-hint-spacer"]],null,null,null,null,null)),al["\u0275ncd"](null,7)],function(e,t){e(t,2,0,t.component.hintLabel)},function(e,t){e(t,0,0,t.component._subscriptAnimationState)})}function ze(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{underlineRef:0}),al["\u0275qud"](402653184,2,{_connectionContainerRef:0}),al["\u0275qud"](402653184,3,{_inputContainerRef:0}),al["\u0275qud"](671088640,4,{_label:0}),(e()(),al["\u0275eld"](4,0,null,null,18,"div",[["class","mat-input-wrapper mat-form-field-wrapper"]],null,null,null,null,null)),(e()(),al["\u0275eld"](5,0,[[2,0],["connectionContainer",1]],null,9,"div",[["class","mat-input-flex mat-form-field-flex"]],null,[[null,"click"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==(i._control.onContainerClick&&i._control.onContainerClick(n))&&r),r},null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,Re)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](8,0,[[3,0],["inputContainer",1]],null,4,"div",[["class","mat-input-infix mat-form-field-infix"]],null,null,null,null,null)),al["\u0275ncd"](null,1),(e()(),al["\u0275eld"](10,0,null,null,2,"span",[["class","mat-form-field-label-wrapper mat-input-placeholder-wrapper mat-form-field-placeholder-wrapper"]],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,Ae)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Le)),al["\u0275did"](14,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](15,0,[[1,0],["underline",1]],null,1,"div",[["class","mat-input-underline mat-form-field-underline"]],null,null,null,null,null)),(e()(),al["\u0275eld"](16,0,null,null,0,"span",[["class","mat-input-ripple mat-form-field-ripple"]],[[2,"mat-accent",null],[2,"mat-warn",null]],null,null,null,null)),(e()(),al["\u0275eld"](17,0,null,null,5,"div",[["class","mat-input-subscript-wrapper mat-form-field-subscript-wrapper"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,cl.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Fe)),al["\u0275did"](20,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Ve)),al["\u0275did"](22,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null)],function(e,t){var n=t.component;e(t,7,0,n._prefixChildren.length),e(t,12,0,n._hasFloatingLabel()),e(t,14,0,n._suffixChildren.length),e(t,18,0,n._getDisplayedMessages()),e(t,20,0,"error"),e(t,22,0,"hint")},function(e,t){var n=t.component;e(t,16,0,"accent"==n.color,"warn"==n.color)})}function Be(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-name-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataverse Name"]))],null,null)}function He(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-name-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function We(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataformat-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Data Format"]))],null,null)}function qe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-dataformat-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataFormat)})}function Ue(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-pendingop-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Pending Ops"]))],null,null)}function Ge(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-pendingop-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.PendingOp)})}function Ke(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Timestamp"]))],null,null)}function $e(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function Ze(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function Qe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function Ye(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,79,"mat-table",[["class","dataverses-table mat-table"]],null,null,null,Ee,ud)),al["\u0275did"](1,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,null]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,3,{_columnDefs:1}),al["\u0275qud"](335544320,4,{_headerDef:0}),al["\u0275qud"](603979776,5,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](7,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](8,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,6,{cell:0}),al["\u0275qud"](335544320,7,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Be)),al["\u0275did"](14,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[7,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,He)),al["\u0275did"](18,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[6,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](23,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](24,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,We)),al["\u0275did"](30,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,qe)),al["\u0275did"](34,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](39,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](40,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ue)),al["\u0275did"](46,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ge)),al["\u0275did"](50,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](55,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](56,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ke)),al["\u0275did"](62,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,$e)),al["\u0275did"](66,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Ze)),al["\u0275did"](71,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](72,3),al["\u0275prd"](2048,[[4,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Qe)),al["\u0275did"](76,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](77,3),al["\u0275prd"](2048,[[5,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){e(t,1,0,t.component.dataSource),e(t,8,0,"DataverseName"),e(t,24,0,"DataFormat"),e(t,40,0,"PendingOp"),e(t,56,0,"Timestamp"),e(t,71,0,e(t,72,0,"DataverseName","DataFormat","Timestamp")),e(t,76,0,e(t,77,0,"DataverseName","DataFormat","Timestamp"))},null)}function Xe(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](2,0,null,null,86,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](4,0,null,null,54,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](6,0,null,null,48,"mat-card",[["class","dataverses-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](7,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](9,0,null,0,12,"mat-toolbar",[["class","dataverses-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](10,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,2,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](13,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](14,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](17,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATAVERSES - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](20,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](23,0,null,0,6,"mat-card-content",[["class","dataverses-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](24,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,2,null,Ye)),al["\u0275did"](27,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](31,0,null,0,22,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](32,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](34,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openCreateDataverseDialog()&&r),r},J,nc)),al["\u0275did"](35,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](36,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CREATE"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](39,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropDataverseDialog()&&r),r},J,nc)),al["\u0275did"](40,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](41,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](44,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](45,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](47,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](49,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getDataverse()&&r),r},J,nc)),al["\u0275did"](50,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](51,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](56,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](57,49152,[[1,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["  \n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](60,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](62,0,null,null,24,"mat-card",[["class","dataverses-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](63,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](65,0,null,0,12,"mat-toolbar",[["class","dataverses-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](66,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,14,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](69,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](70,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](73,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATAVERSE - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](76,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](79,0,null,0,6,"mat-card-content",[["class","dataverses-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](80,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](82,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](83,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](84,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,10,0,"primary"),e(t,14,0),e(t,27,0,al["\u0275unv"](t,27,0,al["\u0275nov"](t,28).transform(n.loaded$))),e(t,66,0,"primary"),e(t,70,0)},function(e,t){var n=t.component;e(t,9,0,al["\u0275nov"](t,10)._toolbarRows.length,!al["\u0275nov"](t,10)._toolbarRows.length),e(t,31,0,"end"===al["\u0275nov"](t,32).align),e(t,34,0,al["\u0275nov"](t,35).disabled||null),e(t,39,0,al["\u0275nov"](t,40).disabled||null),e(t,45,0,n.errorMessage),e(t,49,0,al["\u0275nov"](t,50).disabled||null),e(t,65,0,al["\u0275nov"](t,66)._toolbarRows.length,!al["\u0275nov"](t,66)._toolbarRows.length),e(t,84,0,n.output)})}function Je(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,32,"div",[["class","dataverse-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["CREATE DATAVERSE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["GIVE A NAME TO THE NEW DATAVERSE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.dataverseName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](35,0,null,null,13,"div",[["class","mat-dialog-actions"],["mat-dialog-actions",""]],null,null,null,null,null)),al["\u0275did"](36,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](38,0,null,null,4,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"],["type","button"]],[[8,"disabled",0],[1,"aria-label",0]],[[null,"click"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==al["\u0275nov"](e,41).dialogRef.close(al["\u0275nov"](e,41).dialogResult)&&r),"click"===t&&(r=!1!==i.onClick()&&r),r},J,nc)),al["\u0275did"](39,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](40,16384,null,0,Gs,[],null,null),al["\u0275did"](41,540672,null,0,Vs,[Ns],{dialogResult:[0,"dialogResult"]},null),(e()(),al["\u0275ted"](-1,0,["CREATE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](44,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](45,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](46,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.dataverseName),e(t,30,0),e(t,41,0,n.data.dataverseName)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,38,0,al["\u0275nov"](t,39).disabled||null,al["\u0275nov"](t,41).ariaLabel),e(t,44,0,al["\u0275nov"](t,45).disabled||null)})}function et(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","dataverse-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP DATAVERSE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE NAME OF THE DATAVERSE TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.dataverseName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.dataverseName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function tt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-compactionpolicy-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Compaction Policy"]))],null,null)}function nt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-compactionpolicy-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.CompactionPolicy)})}function rt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasetid-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataset Id"]))],null,null)}function it(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datasetid-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetId)})}function ot(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasetname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataset Name"]))],null,null)}function lt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datasetname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetName)})}function at(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasettype-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataset Type"]))],null,null)}function st(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datasettype-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetType)})}function ut(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datatypedataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Datatype Dataverse Name"]))],null,null)}function ct(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datatypedataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatatypeDataverseName)})}function dt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datatypename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Datatype Name"]))],null,null)}function pt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datatypename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatatypeName)})}function ft(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataverse Name"]))],null,null)}function ht(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-dataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function mt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-groupname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Group Name"]))],null,null)}function gt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-groupname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.GroupName)})}function yt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-pendingop-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Pending Op"]))],null,null)}function vt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-pendingop-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.PendingOp)})}function bt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Timestamp"]))],null,null)}function _t(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function wt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function xt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function Ct(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,216,"mat-card",[["class","datasets-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](1,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](3,0,null,0,12,"mat-toolbar",[["class","datasets-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](4,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,2,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](7,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](8,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATASETS - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](14,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](17,0,null,0,179,"mat-card-content",[["class","datasets-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](20,0,null,null,175,"mat-table",[["class","datasets-table mat-table"]],null,null,null,Ee,ud)),al["\u0275did"](21,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,null]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,3,{_columnDefs:1}),al["\u0275qud"](335544320,4,{_headerDef:0}),al["\u0275qud"](603979776,5,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](27,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](28,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,6,{cell:0}),al["\u0275qud"](335544320,7,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,tt)),al["\u0275did"](34,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[7,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,nt)),al["\u0275did"](38,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[6,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](43,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](44,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,rt)),al["\u0275did"](50,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,it)),al["\u0275did"](54,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](59,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](60,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ot)),al["\u0275did"](66,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,lt)),al["\u0275did"](70,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](75,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](76,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,at)),al["\u0275did"](82,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,st)),al["\u0275did"](86,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](91,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](92,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,14,{cell:0}),al["\u0275qud"](335544320,15,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ut)),al["\u0275did"](98,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[15,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ct)),al["\u0275did"](102,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[14,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](107,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](108,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,16,{cell:0}),al["\u0275qud"](335544320,17,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,dt)),al["\u0275did"](114,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[17,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,pt)),al["\u0275did"](118,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[16,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](123,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](124,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,18,{cell:0}),al["\u0275qud"](335544320,19,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ft)),al["\u0275did"](130,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[19,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ht)),al["\u0275did"](134,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[18,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](139,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](140,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,20,{cell:0}),al["\u0275qud"](335544320,21,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,mt)),al["\u0275did"](146,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[21,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,gt)),al["\u0275did"](150,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[20,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](155,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](156,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,22,{cell:0}),al["\u0275qud"](335544320,23,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,yt)),al["\u0275did"](162,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[23,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,vt)),al["\u0275did"](166,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[22,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](171,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](172,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,24,{cell:0}),al["\u0275qud"](335544320,25,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,bt)),al["\u0275did"](178,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[25,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,_t)),al["\u0275did"](182,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[24,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275and"](0,null,null,3,null,wt)),al["\u0275did"](187,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](188,4),al["\u0275prd"](2048,[[4,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](0,null,null,3,null,xt)),al["\u0275did"](192,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](193,4),al["\u0275prd"](2048,[[5,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](198,0,null,0,17,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](199,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](201,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropDatasetDialog()&&r),r},J,nc)),al["\u0275did"](202,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](203,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](206,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](207,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](209,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](211,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getDatasets()&&r),r},J,nc)),al["\u0275did"](212,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](213,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n      "]))],function(e,t){var n=t.component;e(t,4,0,"primary"),e(t,8,0),e(t,21,0,n.dataSource),e(t,28,0,"CompactionPolicy"),e(t,44,0,"DatasetId"),e(t,60,0,"DatasetName"),e(t,76,0,"DatasetType"),e(t,92,0,"DatatypeDataverseName"),e(t,108,0,"DatatypeName"),e(t,124,0,"DataverseName"),e(t,140,0,"GroupName"),e(t,156,0,"PendingOp"),e(t,172,0,"Timestamp"),e(t,187,0,e(t,188,0,"DatasetName","DataverseName","DatatypeName","Timestamp")),e(t,192,0,e(t,193,0,"DatasetName","DataverseName","DatatypeName","Timestamp"))},function(e,t){var n=t.component;e(t,3,0,al["\u0275nov"](t,4)._toolbarRows.length,!al["\u0275nov"](t,4)._toolbarRows.length),e(t,198,0,"end"===al["\u0275nov"](t,199).align),e(t,201,0,al["\u0275nov"](t,202).disabled||null),e(t,207,0,n.errorMessage),e(t,211,0,al["\u0275nov"](t,212).disabled||null)})}function Et(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](2,0,null,null,40,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](4,0,null,null,8,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275and"](16777216,null,null,2,null,Ct)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](10,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](11,49152,[[1,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](14,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](16,0,null,null,24,"mat-card",[["class","datasets-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](17,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](19,0,null,0,12,"mat-toolbar",[["class","datasets-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](20,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,26,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](23,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](24,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](27,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATASET - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](30,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](33,0,null,0,6,"mat-card-content",[["class","datasets-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](34,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](36,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](37,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](38,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,7,0,al["\u0275unv"](t,7,0,al["\u0275nov"](t,8).transform(n.loaded$))),e(t,20,0,"primary"),e(t,24,0)},function(e,t){var n=t.component;e(t,19,0,al["\u0275nov"](t,20)._toolbarRows.length,!al["\u0275nov"](t,20)._toolbarRows.length),e(t,38,0,n.output)})}function St(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function Ot(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","dataset-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP DATASET"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE NAME OF THE DATASET TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.datasetName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.datasetName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function Tt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datatypename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Datatype Name"]))],null,null)}function kt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","datatypes-datatypename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[""," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatatypeName)})}function Dt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataverse Name "]))],null,null)}function It(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","datatypes-dataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[""," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function Rt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Timestamp"]))],null,null)}function Mt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","datatypes-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function Pt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function Nt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function At(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,104,"mat-card",[["class","datatypes-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](1,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](3,0,null,0,12,"mat-toolbar",[["class","datatypes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](4,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,4,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](7,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](8,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATATYPES - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](14,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](17,0,null,0,67,"mat-card-content",[["class","datatypes-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](20,0,null,null,63,"mat-table",[["class","datatypes-table mat-table"],["role","treegrid"]],null,null,null,Ee,ud)),al["\u0275did"](21,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,"treegrid"]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,5,{_columnDefs:1}),al["\u0275qud"](335544320,6,{_headerDef:0}),al["\u0275qud"](603979776,7,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](27,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](28,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[5,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Tt)),al["\u0275did"](34,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,kt)),al["\u0275did"](38,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](43,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](44,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[5,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Dt)),al["\u0275did"](50,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,It)),al["\u0275did"](54,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](59,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](60,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[5,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Rt)),al["\u0275did"](66,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Mt)),al["\u0275did"](70,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Pt)),al["\u0275did"](75,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](76,3),al["\u0275prd"](2048,[[6,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Nt)),al["\u0275did"](80,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](81,3),al["\u0275prd"](2048,[[7,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](86,0,null,0,17,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](87,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](89,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropDatatypeDialog()&&r),r},J,nc)),al["\u0275did"](90,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](91,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](94,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](95,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](97,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](99,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getDatatypes()&&r),r},J,nc)),al["\u0275did"](100,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](101,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n    "]))],function(e,t){var n=t.component;e(t,4,0,"primary"),e(t,8,0),e(t,21,0,n.dataSource),e(t,28,0,"DatatypeName"),e(t,44,0,"DataverseName"),e(t,60,0,"Timestamp"),e(t,75,0,e(t,76,0,"DatatypeName","DataverseName","Timestamp")),e(t,80,0,e(t,81,0,"DatatypeName","DataverseName","Timestamp"))},function(e,t){var n=t.component;e(t,3,0,al["\u0275nov"](t,4)._toolbarRows.length,!al["\u0275nov"](t,4)._toolbarRows.length),e(t,86,0,"end"===al["\u0275nov"](t,87).align),e(t,89,0,al["\u0275nov"](t,90).disabled||null),e(t,95,0,n.errorMessage),e(t,99,0,al["\u0275nov"](t,100).disabled||null)})}function Lt(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{paginator:0}),al["\u0275qud"](402653184,2,{filter:0}),al["\u0275qud"](402653184,3,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](4,0,null,null,40,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](6,0,null,null,8,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n   "])),(e()(),al["\u0275and"](16777216,null,null,2,null,At)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,[" \n    "])),(e()(),al["\u0275eld"](12,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](13,49152,[[3,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](16,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](18,0,null,null,24,"mat-card",[["class","datatypes-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](19,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](21,0,null,0,12,"mat-toolbar",[["class","datatypes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](22,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,14,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](25,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](26,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](29,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATATYPE - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](32,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](35,0,null,0,6,"mat-card-content",[["class","datatypes-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](36,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](38,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](39,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](40,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,9,0,al["\u0275unv"](t,9,0,al["\u0275nov"](t,10).transform(n.loaded$))),e(t,22,0,"primary"),e(t,26,0)},function(e,t){var n=t.component;e(t,21,0,al["\u0275nov"](t,22)._toolbarRows.length,!al["\u0275nov"](t,22)._toolbarRows.length),e(t,40,0,n.output)})}function Ft(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function jt(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","datatype-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP DATATYPE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE NAME OF THE DATATYPE TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.datatypeName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.datatypeName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function Vt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Dataverse Name "]))],null,null)}function zt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-dataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function Bt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasetname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Dataset Name "]))],null,null)}function Ht(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-datasetname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetName)})}function Wt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-indexname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Index Name "]))],null,null)}function qt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-indexname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.IndexName)})}function Ut(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-indexestructure-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Index Structure "]))],null,null)}function Gt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-indexstructure-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.IndexStructure)})}function Kt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-isprimary-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Is Primary "]))],null,null)}function $t(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-isprimary-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.IsPrimary)})}function Zt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Timestamp "]))],null,null)}function Qt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function Yt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-pendingop-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" PendingOp "]))],null,null)}function Xt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-dataverse-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.PendingOp)})}function Jt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function en(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function tn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,168,"mat-card",[["class","indexes-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](1,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](3,0,null,0,12,"mat-toolbar",[["class","indexes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](4,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,2,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](7,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](8,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INDEXES - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](14,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](17,0,null,0,131,"mat-card-content",[["class","indexes-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](20,0,null,null,127,"mat-table",[["class","indexes-table mat-table"]],null,null,null,Ee,ud)),al["\u0275did"](21,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,null]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,3,{_columnDefs:1}),al["\u0275qud"](335544320,4,{_headerDef:0}),al["\u0275qud"](603979776,5,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](27,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](28,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,6,{cell:0}),al["\u0275qud"](335544320,7,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Vt)),al["\u0275did"](34,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[7,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,zt)),al["\u0275did"](38,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[6,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](43,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](44,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Bt)),al["\u0275did"](50,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ht)),al["\u0275did"](54,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](59,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](60,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Wt)),al["\u0275did"](66,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,qt)),al["\u0275did"](70,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](75,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](76,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ut)),al["\u0275did"](82,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Gt)),al["\u0275did"](86,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](91,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](92,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,14,{cell:0}),al["\u0275qud"](335544320,15,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Kt)),al["\u0275did"](98,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[15,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,$t)),al["\u0275did"](102,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[14,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](107,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](108,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,16,{cell:0}),al["\u0275qud"](335544320,17,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Zt)),al["\u0275did"](114,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[17,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Qt)),al["\u0275did"](118,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[16,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](123,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](124,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,18,{cell:0}),al["\u0275qud"](335544320,19,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Yt)),al["\u0275did"](130,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[19,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Xt)),al["\u0275did"](134,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[18,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Jt)),al["\u0275did"](139,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](140,6),al["\u0275prd"](2048,[[4,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,en)),al["\u0275did"](144,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](145,6),al["\u0275prd"](2048,[[5,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](150,0,null,0,17,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](151,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](153,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropIndexDialog()&&r),r},J,nc)),al["\u0275did"](154,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](155,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](158,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](159,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](161,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](163,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getIndexes()&&r),r},J,nc)),al["\u0275did"](164,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](165,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n    "]))],function(e,t){var n=t.component;e(t,4,0,"primary"),e(t,8,0),e(t,21,0,n.dataSource),e(t,28,0,"DataverseName"),e(t,44,0,"DatasetName"),e(t,60,0,"IndexName"),e(t,76,0,"IndexStructure"),e(t,92,0,"IsPrimary"),e(t,108,0,"Timestamp"),e(t,124,0,"PendingOp"),e(t,139,0,e(t,140,0,"IndexName","DatasetName","DataverseName","IndexStructure","IsPrimary","Timestamp")),e(t,144,0,e(t,145,0,"IndexName","DatasetName","DataverseName","IndexStructure","IsPrimary","Timestamp"))},function(e,t){var n=t.component;e(t,3,0,al["\u0275nov"](t,4)._toolbarRows.length,!al["\u0275nov"](t,4)._toolbarRows.length),e(t,150,0,"end"===al["\u0275nov"](t,151).align),e(t,153,0,al["\u0275nov"](t,154).disabled||null),e(t,159,0,n.errorMessage),e(t,163,0,al["\u0275nov"](t,164).disabled||null)})}function nn(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](2,0,null,null,40,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](4,0,null,null,8,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275and"](16777216,null,null,2,null,tn)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](10,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](11,49152,[[1,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["  \n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](14,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](16,0,null,null,24,"mat-card",[["class","indexes-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](17,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](19,0,null,0,12,"mat-toolbar",[["class","indexes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](20,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,20,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](23,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](24,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](27,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INDEX - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](30,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](33,0,null,0,6,"mat-card-content",[["class","indexes-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](34,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](36,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](37,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](38,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,7,0,al["\u0275unv"](t,7,0,al["\u0275nov"](t,8).transform(n.loaded$))),e(t,20,0,"primary"),e(t,24,0)},function(e,t){var n=t.component;e(t,19,0,al["\u0275nov"](t,20)._toolbarRows.length,!al["\u0275nov"](t,20)._toolbarRows.length),e(t,38,0,n.output)})}function rn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function on(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","index-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP INDEX"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE DATAVERSENAME.INDEXNAME OF THE INDEX TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.indexName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.indexName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function ln(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,41,"header",[["class","awc-navbar"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,38,"nav",[["class","awc-navbar-header"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](5,0,null,null,8,"a",[["aria-label","AsterixDB Web Console"],["class","awc-button mat-button"],["mat-button",""],["routerLink","/"]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,6)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](6,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](7,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](9,0,null,0,0,"img",[["alt","AsterixDB"],["class","awc-asterixDB-logo"],["src","assets/asterixdb_tm.png"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["Administration Console"])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](15,0,null,null,0,"div",[["class","flex-spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](17,0,null,null,3,"a",[["aria-label","WEBSITE"],["class","awc-button awc-navbar-hide-small mat-button"],["href","https://asterixDB.apache.org"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,18)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](18,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](19,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        WEBSITE\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](22,0,null,null,3,"a",[["aria-label","FILE ISSUES"],["class","awc-button awc-navbar-hide-small mat-button"],["href","https://issues.apache.org/jira/browse/ASTERIXDB"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,23)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](23,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](24,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        FILE ISSUES\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](27,0,null,null,3,"a",[["aria-label","DOCUMENTATION"],["class","awc-button awc-navbar-hide-small mat-button"],["href","https://ci.apache.org/projects/asterixdb/index.html"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,28)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](28,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](29,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        DOCUMENTATION\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](32,0,null,null,3,"a",[["aria-label","CONTACT"],["class","awc-button docs-navbar-hide-small mat-button"],["href","https://asterixdb.apache.org/community.html"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,33)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](33,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](34,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        CONTACT\n      "])),(e()(),al["\u0275ted"](-1,null,["\n\n      "])),(e()(),al["\u0275eld"](37,0,null,null,3,"a",[["aria-label","GITHUB"],["class","awc-button docs-navbar-hide-small mat-button"],["href","https://github.com/apache/asterixdb/"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,38)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](38,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        GITHUB\n      "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],null,function(e,t){e(t,5,0,al["\u0275nov"](t,6).disabled?-1:0,al["\u0275nov"](t,6).disabled||null,al["\u0275nov"](t,6).disabled.toString()),e(t,17,0,al["\u0275nov"](t,18).disabled?-1:0,al["\u0275nov"](t,18).disabled||null,al["\u0275nov"](t,18).disabled.toString()),e(t,22,0,al["\u0275nov"](t,23).disabled?-1:0,al["\u0275nov"](t,23).disabled||null,al["\u0275nov"](t,23).disabled.toString()),e(t,27,0,al["\u0275nov"](t,28).disabled?-1:0,al["\u0275nov"](t,28).disabled||null,al["\u0275nov"](t,28).disabled.toString()),e(t,32,0,al["\u0275nov"](t,33).disabled?-1:0,al["\u0275nov"](t,33).disabled||null,al["\u0275nov"](t,33).disabled.toString()),e(t,37,0,al["\u0275nov"](t,38).disabled?-1:0,al["\u0275nov"](t,38).disabled||null,al["\u0275nov"](t,38).disabled.toString())})}function an(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function sn(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](16777216,null,null,1,null,an)),al["\u0275did"](1,212992,null,0,$l,[al.ComponentFactoryResolver,al.ViewContainerRef],{portal:[0,"portal"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.context.$implicit.templateLabel)},null)}function un(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](0,null,["",""]))],null,function(e,t){e(t,0,0,t.parent.context.$implicit.textLabel)})}function cn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,6,"div",[["class","mat-tab-label mat-ripple"],["mat-ripple",""],["matTabLabelWrapper",""],["role","tab"]],[[8,"id",0],[1,"tabIndex",0],[1,"aria-controls",0],[1,"aria-selected",0],[2,"mat-tab-label-active",null],[2,"mat-ripple-unbounded",null],[2,"mat-tab-disabled",null]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._handleClick(e.context.$implicit,al["\u0275nov"](e.parent,2),e.context.index)&&r),r},null,null)),al["\u0275did"](1,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{disabled:[0,"disabled"]},null),al["\u0275did"](2,16384,[[2,4]],0,Jf,[al.ElementRef],{disabled:[0,"disabled"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,sn)),al["\u0275did"](4,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,un)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,1,0,t.context.$implicit.disabled||t.component.disableRipple),e(t,2,0,t.context.$implicit.disabled),e(t,4,0,t.context.$implicit.templateLabel),e(t,6,0,!t.context.$implicit.templateLabel)},function(e,t){var n=t.component;e(t,0,0,n._getTabLabelId(t.context.index),n._getTabIndex(t.context.$implicit,t.context.index),n._getTabContentId(t.context.index),n.selectedIndex==t.context.index,n.selectedIndex==t.context.index,al["\u0275nov"](t,1).unbounded,al["\u0275nov"](t,2).disabled)})}function dn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-tab-body",[["class","mat-tab-body"],["role","tabpanel"]],[[8,"id",0],[1,"aria-labelledby",0],[2,"mat-tab-body-active",null]],[[null,"_onCentered"],[null,"_onCentering"]],function(e,t,n){var r=!0,i=e.component;return"_onCentered"===t&&(r=!1!==i._removeTabBodyWrapperHeight()&&r),"_onCentering"===t&&(r=!1!==i._setTabBodyWrapperHeight(n)&&r),r},hn,rh)),al["\u0275did"](1,114688,null,0,Qf,[al.ElementRef,[2,Bl]],{_content:[0,"_content"],position:[1,"position"],origin:[2,"origin"]},{_onCentering:"_onCentering",_onCentered:"_onCentered"})],function(e,t){e(t,1,0,t.context.$implicit.content,t.context.$implicit.position,t.context.$implicit.origin)},function(e,t){var n=t.component;e(t,0,0,n._getTabContentId(t.context.index),n._getTabLabelId(t.context.index),n.selectedIndex==t.context.index)})}function pn(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_tabBodyWrapper:0}),(e()(),al["\u0275eld"](1,0,null,null,4,"mat-tab-header",[["class","mat-tab-header"]],[[2,"mat-tab-header-pagination-controls-enabled",null],[2,"mat-tab-header-rtl",null]],[[null,"indexFocused"],[null,"selectFocusedIndex"]],function(e,t,n){var r=!0,i=e.component;return"indexFocused"===t&&(r=!1!==i._focusChanged(n)&&r),"selectFocusedIndex"===t&&(r=!1!==(i.selectedIndex=n)&&r),r},mn,ih)),al["\u0275did"](2,3325952,[["tabHeader",4]],1,eh,[al.ElementRef,al.ChangeDetectorRef,jl,[2,Bl]],{disableRipple:[0,"disableRipple"],selectedIndex:[1,"selectedIndex"]},{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}),al["\u0275qud"](603979776,2,{_labelWrappers:1}),(e()(),al["\u0275and"](16777216,null,0,1,null,cn)),al["\u0275did"](5,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275eld"](6,0,[[1,0],["tabBodyWrapper",1]],null,2,"div",[["class","mat-tab-body-wrapper"]],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,dn)),al["\u0275did"](8,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],function(e,t){var n=t.component;e(t,2,0,n.disableRipple,n.selectedIndex),e(t,5,0,n._tabs),e(t,8,0,n._tabs)},function(e,t){e(t,1,0,al["\u0275nov"](t,2)._showPaginationControls,"rtl"==al["\u0275nov"](t,2)._getLayoutDirection())})}function fn(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function hn(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,[["content",1]],null,2,"div",[["class","mat-tab-body-content"]],[[24,"@translateTab",0]],[[null,"@translateTab.start"],[null,"@translateTab.done"]],function(e,t,n){var r=!0,i=e.component;return"@translateTab.start"===t&&(r=!1!==i._onTranslateTabStarted(n)&&r),"@translateTab.done"===t&&(r=!1!==i._onTranslateTabComplete(n)&&r),r},null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,fn)),al["\u0275did"](2,212992,null,0,Zf,[al.ComponentFactoryResolver,al.ViewContainerRef,Qf],null,null)],function(e,t){e(t,2,0)},function(e,t){e(t,0,0,t.component._position)})}function mn(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_inkBar:0}),al["\u0275qud"](402653184,2,{_tabListContainer:0}),al["\u0275qud"](402653184,3,{_tabList:0}),(e()(),al["\u0275eld"](3,0,null,null,2,"div",[["aria-hidden","true"],["class","mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4 mat-ripple"],["mat-ripple",""]],[[2,"mat-tab-header-pagination-disabled",null],[2,"mat-ripple-unbounded",null]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._scrollHeader("before")&&r),r},null,null)),al["\u0275did"](4,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{disabled:[0,"disabled"]},null),(e()(),al["\u0275eld"](5,0,null,null,0,"div",[["class","mat-tab-header-pagination-chevron"]],null,null,null,null,null)),(e()(),al["\u0275eld"](6,0,[[2,0],["tabListContainer",1]],null,6,"div",[["class","mat-tab-label-container"]],null,[[null,"keydown"]],function(e,t,n){var r=!0;return"keydown"===t&&(r=!1!==e.component._handleKeydown(n)&&r),r},null,null)),(e()(),al["\u0275eld"](7,0,[[3,0],["tabList",1]],null,5,"div",[["class","mat-tab-list"],["role","tablist"]],null,[[null,"cdkObserveContent"]],function(e,t,n){var r=!0;return"cdkObserveContent"===t&&(r=!1!==e.component._onContentChanges()&&r),r},null,null)),al["\u0275did"](8,1196032,null,0,Uf,[qf,al.ElementRef,al.NgZone],null,{event:"cdkObserveContent"}),(e()(),al["\u0275eld"](9,0,null,null,1,"div",[["class","mat-tab-labels"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](11,0,null,null,1,"mat-ink-bar",[["class","mat-ink-bar"]],null,null,null,null,null)),al["\u0275did"](12,16384,[[1,4]],0,Kf,[al.ElementRef,al.NgZone],null,null),(e()(),al["\u0275eld"](13,0,null,null,2,"div",[["aria-hidden","true"],["class","mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4 mat-ripple"],["mat-ripple",""]],[[2,"mat-tab-header-pagination-disabled",null],[2,"mat-ripple-unbounded",null]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._scrollHeader("after")&&r),r},null,null)),al["\u0275did"](14,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{disabled:[0,"disabled"]},null),(e()(),al["\u0275eld"](15,0,null,null,0,"div",[["class","mat-tab-header-pagination-chevron"]],null,null,null,null,null))],function(e,t){var n=t.component;e(t,4,0,n._disableScrollBefore||n.disableRipple),e(t,14,0,n._disableScrollAfter||n.disableRipple)},function(e,t){var n=t.component;e(t,3,0,n._disableScrollBefore,al["\u0275nov"](t,4).unbounded),e(t,13,0,n._disableScrollAfter,al["\u0275nov"](t,14).unbounded)})}function gn(e){return al["\u0275vid"](0,[al["\u0275ncd"](null,0),(e()(),al["\u0275and"](0,null,null,0))],null,null)}function yn(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_content:0}),(e()(),al["\u0275and"](0,[[1,2]],null,0,null,gn))],null,null)}function vn(e){return al["\u0275vid"](0,[],null,null)}function bn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"li",[["class","ui-treenode-droppoint"]],null,[[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"]],function(e,t,n){var r=!0,i=e.component;return"drop"===t&&(r=!1!==i.onDropPoint(n,-1)&&r),"dragover"===t&&(r=!1!==i.onDropPointDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDropPointDragEnter(n,-1)&&r),"dragleave"===t&&(r=!1!==i.onDropPointDragLeave(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-treenode-droppoint-active ui-state-highlight":0})],function(e,t){e(t,1,0,"ui-treenode-droppoint",e(t,2,0,t.component.draghoverPrev))},null)}function _n(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"div",[["class","ui-chkbox"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,4,"div",[["class","ui-chkbox-box ui-widget ui-corner-all ui-state-default"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](3,0,null,null,2,"span",[["class","ui-chkbox-icon ui-clickable fa"]],null,null,null,null,null)),al["\u0275did"](4,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](5,{"fa-check":0,"fa-minus":1})],function(e,t){var n=t.component;e(t,4,0,"ui-chkbox-icon ui-clickable fa",e(t,5,0,n.isSelected(),n.node.partialSelected))},null)}function wn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],null,function(e,t){e(t,0,0,t.component.getIcon())})}function xn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.node.label)})}function Cn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-treeNodeTemplateLoader",[],null,null,null,vn,uh)),al["\u0275did"](3,245760,null,0,lh.TreeNodeTemplateLoader,[al.ViewContainerRef],{node:[0,"node"],template:[1,"template"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "]))],function(e,t){var n=t.component;e(t,3,0,n.node,n.tree.getTemplateForNode(n.node))},null)}function En(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](1,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],parentNode:[1,"parentNode"],index:[2,"index"],firstChild:[3,"firstChild"],lastChild:[4,"lastChild"]},null)],function(e,t){e(t,1,0,t.context.$implicit,t.component.node,t.context.index,t.context.first,t.context.last)},null)}function Sn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"ul",[["class","ui-treenode-children"],["style","display: none;"]],[[4,"display",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,En)),al["\u0275did"](3,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){e(t,3,0,t.component.node.children)},function(e,t){e(t,0,0,t.component.node.expanded?"block":"none")})}function On(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,29,"li",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pad"](2,3),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](4,0,null,null,21,"div",[["class","ui-treenode-content"]],[[8,"draggable",0]],[[null,"click"],[null,"contextmenu"],[null,"touchend"],[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"],[null,"dragstart"],[null,"dragend"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.onNodeClick(n)&&r),"contextmenu"===t&&(r=!1!==i.onNodeRightClick(n)&&r),"touchend"===t&&(r=!1!==i.onNodeTouchEnd()&&r),"drop"===t&&(r=!1!==i.onDropNode(n)&&r),"dragover"===t&&(r=!1!==i.onDropNodeDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDropNodeDragEnter(n)&&r),"dragleave"===t&&(r=!1!==i.onDropNodeDragLeave(n)&&r),"dragstart"===t&&(r=!1!==i.onDragStart(n)&&r),"dragend"===t&&(r=!1!==i.onDragStop(n)&&r),r},null,null)),al["\u0275did"](5,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](6,{"ui-treenode-selectable":0,"ui-treenode-dragover":1,"ui-treenode-content-selected":2}),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](8,0,null,null,2,"span",[["class","ui-tree-toggler  fa fa-fw"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.toggle(n)&&r),r},null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](10,{"fa-caret-right":0,"fa-caret-down":1}),(e()(),al["\u0275and"](16777216,null,null,1,null,_n)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,wn)),al["\u0275did"](14,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](15,0,null,null,9,"span",[["class","ui-treenode-label ui-corner-all"]],null,null,null,null,null)),al["\u0275did"](16,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](17,{"ui-state-highlight":0}),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,xn)),al["\u0275did"](20,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Cn)),al["\u0275did"](23,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Sn)),al["\u0275did"](28,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,"ui-treenode",n.node.styleClass||"",n.isLeaf()?"ui-treenode-leaf":"")),e(t,5,0,"ui-treenode-content",e(t,6,0,n.tree.selectionMode&&!1!==n.node.selectable,n.draghoverNode,n.isSelected())),e(t,9,0,"ui-tree-toggler  fa fa-fw",e(t,10,0,!n.node.expanded,n.node.expanded)),e(t,12,0,"checkbox"==n.tree.selectionMode),e(t,14,0,n.node.icon||n.node.expandedIcon||n.node.collapsedIcon),e(t,16,0,"ui-treenode-label ui-corner-all",e(t,17,0,n.isSelected())),e(t,20,0,!n.tree.getTemplateForNode(n.node)),e(t,23,0,n.tree.getTemplateForNode(n.node)),e(t,28,0,n.node.children&&n.node.expanded)},function(e,t){e(t,4,0,t.component.tree.draggableNodes)})}function Tn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"li",[["class","ui-treenode-droppoint"]],null,[[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"]],function(e,t,n){var r=!0,i=e.component;return"drop"===t&&(r=!1!==i.onDropPoint(n,1)&&r),"dragover"===t&&(r=!1!==i.onDropPointDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDropPointDragEnter(n,1)&&r),"dragleave"===t&&(r=!1!==i.onDropPointDragLeave(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-treenode-droppoint-active ui-state-highlight":0})],function(e,t){e(t,1,0,"ui-treenode-droppoint",e(t,2,0,t.component.draghoverNext))},null)}function kn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,21,"td",[["class","ui-treenode-connector"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,0,null,null,18,"table",[["class","ui-treenode-connector-table"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275eld"](4,0,null,null,15,"tbody",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275eld"](6,0,null,null,5,"tr",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275eld"](8,0,null,null,2,"td",[],null,null,null,null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](10,{"ui-treenode-connector-line":0}),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275eld"](13,0,null,null,5,"tr",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275eld"](15,0,null,null,2,"td",[],null,null,null,null,null)),al["\u0275did"](16,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](17,{"ui-treenode-connector-line":0}),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){var n=t.component;e(t,9,0,e(t,10,0,!n.firstChild)),e(t,16,0,e(t,17,0,!n.lastChild))},null)}function Dn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"span",[["class","ui-tree-toggler fa fa-fw"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.toggle(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"fa-plus":0,"fa-minus":1})],function(e,t){var n=t.component;e(t,1,0,"ui-tree-toggler fa fa-fw",e(t,2,0,!n.node.expanded,n.node.expanded))},null)}function In(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],null,function(e,t){e(t,0,0,t.component.getIcon())})}function Rn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.node.label)})}function Mn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                            "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-treeNodeTemplateLoader",[],null,null,null,vn,uh)),al["\u0275did"](3,245760,null,0,lh.TreeNodeTemplateLoader,[al.ViewContainerRef],{node:[0,"node"],template:[1,"template"]},null),(e()(),al["\u0275ted"](-1,null,["\n                                        "]))],function(e,t){var n=t.component;e(t,3,0,n.node,n.tree.getTemplateForNode(n.node))},null)}function Pn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](1,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],firstChild:[1,"firstChild"],lastChild:[2,"lastChild"]},null)],function(e,t){e(t,1,0,t.context.$implicit,t.context.first,t.context.last)},null)}function Nn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"td",[["class","ui-treenode-children-container"]],[[4,"display",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,0,null,null,4,"div",[["class","ui-treenode-children"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Pn)),al["\u0275did"](5,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,5,0,t.component.node.children)},function(e,t){e(t,0,0,t.component.node.expanded?"table-cell":"none")})}function An(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,36,"table",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,33,"tbody",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](4,0,null,null,30,"tr",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,kn)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](9,0,null,null,21,"td",[["class","ui-treenode"]],null,null,null,null,null)),al["\u0275did"](10,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](11,{"ui-treenode-collapsed":0}),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](13,0,null,null,16,"div",[["class","ui-treenode-content ui-state-default ui-corner-all"]],null,[[null,"click"],[null,"contextmenu"],[null,"touchend"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.onNodeClick(n)&&r),"contextmenu"===t&&(r=!1!==i.onNodeRightClick(n)&&r),"touchend"===t&&(r=!1!==i.onNodeTouchEnd()&&r),r},null,null)),al["\u0275did"](14,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](15,{"ui-treenode-selectable":0,"ui-state-highlight":1}),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Dn)),al["\u0275did"](18,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,In)),al["\u0275did"](20,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](21,0,null,null,7,"span",[["class","ui-treenode-label ui-corner-all"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Rn)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Mn)),al["\u0275did"](27,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Nn)),al["\u0275did"](33,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,7,0,!n.root),e(t,10,0,"ui-treenode",e(t,11,0,!n.node.expanded)),e(t,14,0,"ui-treenode-content ui-state-default ui-corner-all",e(t,15,0,n.tree.selectionMode,n.isSelected())),e(t,18,0,!n.isLeaf()),e(t,20,0,n.node.icon||n.node.expandedIcon||n.node.collapsedIcon),e(t,24,0,!n.tree.getTemplateForNode(n.node)),e(t,27,0,n.tree.getTemplateForNode(n.node)),e(t,33,0,n.node.children&&n.node.expanded)},function(e,t){e(t,0,0,t.component.node.styleClass)})}function Ln(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,bn)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,On)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Tn)),al["\u0275did"](8,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,An)),al["\u0275did"](11,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,2,0,n.tree.droppableNodes),e(t,5,0,!n.tree.horizontal),e(t,8,0,n.tree.droppableNodes&&n.lastChild),e(t,11,0,n.tree.horizontal)},null)}function Fn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ln)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){e(t,2,0,t.component.node)},null)}function jn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"div",[["class","ui-tree-loading-mask ui-widget-overlay"]],null,null,null,null,null))],null,null)}function Vn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-tree-loading-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,function(e,t){e(t,2,0,"fa fa-spin fa-2x "+t.component.loadingIcon)})}function zn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](1,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],index:[1,"index"],firstChild:[2,"firstChild"],lastChild:[3,"lastChild"]},null)],function(e,t){e(t,1,0,t.context.$implicit,t.context.index,t.context.first,t.context.last)},null)}function Bn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,16,"div",[],null,[[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"]],function(e,t,n){var r=!0,i=e.component;return"drop"===t&&(r=!1!==i.onDrop(n)&&r),"dragover"===t&&(r=!1!==i.onDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDragEnter(n)&&r),"dragleave"===t&&(r=!1!==i.onDragLeave(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-tree ui-widget ui-widget-content ui-corner-all":0,"ui-tree-selectable":1,"ui-treenode-dragover":2,"ui-tree-loading":3}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,jn)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Vn)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](11,0,null,null,4,"ul",[["class","ui-tree-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,zn)),al["\u0275did"](14,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,n.styleClass,e(t,2,0,!0,n.selectionMode,n.dragHover,n.loading)),e(t,3,0,n.style),e(t,6,0,n.loading),e(t,9,0,n.loading),e(t,14,0,n.value)},null)}function Hn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"div",[["class","ui-tree-loading ui-widget-overlay"]],null,null,null,null,null))],null,null)}function Wn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-tree-loading-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,function(e,t){e(t,2,0,"fa fa-spin fa-2x "+t.component.loadingIcon)})}function qn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"table",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](3,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],root:[1,"root"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,3,0,t.component.value[0],!0)},null)}function Un(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,13,"div",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-tree ui-tree-horizontal ui-widget ui-widget-content ui-corner-all":0,"ui-tree-selectable":1}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Hn)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Wn)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,qn)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,n.styleClass,e(t,2,0,!0,n.selectionMode)),e(t,3,0,n.style),e(t,6,0,n.loading),e(t,9,0,n.loading),e(t,12,0,n.value&&n.value[0])},null)}function Gn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Bn)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Un)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,!n.horizontal),e(t,5,0,n.horizontal)},null)}function Kn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,55,"mat-card",[["class","metadata-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n  "])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","metadata-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","example-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["METADATA GUIDE"])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n  "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](18,0,null,0,36,"div",[["class","metadata-content-area"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](20,0,null,null,33,"div",[["class","metadata-tree"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](22,0,null,null,6,"div",[["class","metadata-all"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](24,0,null,null,3,"p-tree",[["selectionMode","single"]],null,[[null,"onNodeSelect"]],function(e,t,n){var r=!0;return"onNodeSelect"===t&&(r=!1!==e.component.nodeSelectAll(n)&&r),r},Gn,dh)),al["\u0275did"](25,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},{onNodeSelect:"onNodeSelect"}),al["\u0275qud"](603979776,2,{templates:1}),al["\u0275pod"](27,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](30,0,null,null,6,"div",[["class","metadata-datasets"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](32,0,null,null,3,"p-tree",[["selectionMode","single"]],null,[[null,"onNodeSelect"]],function(e,t,n){var r=!0;return"onNodeSelect"===t&&(r=!1!==e.component.nodeSelectDataset(n)&&r),r},Gn,dh)),al["\u0275did"](33,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},{onNodeSelect:"onNodeSelect"}),al["\u0275qud"](603979776,3,{templates:1}),al["\u0275pod"](35,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](38,0,null,null,6,"div",[["class","metadata-datatypes"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](40,0,null,null,3,"p-tree",[["selectionMode","single"]],null,null,null,Gn,dh)),al["\u0275did"](41,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},null),al["\u0275qud"](603979776,4,{templates:1}),al["\u0275pod"](43,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](46,0,null,null,6,"div",[["class","metadata-index"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](48,0,null,null,3,"p-tree",[["selectionMode","single"]],null,null,null,Gn,dh)),al["\u0275did"](49,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},null),al["\u0275qud"](603979776,5,{templates:1}),al["\u0275pod"](51,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n\n    "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,0,["\n  "])),(e()(),al["\u0275ted"](-1,0,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,25,0,n.nodesAll,"single",e(t,27,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,33,0,n.nodesDatasets,"single",e(t,35,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,41,0,n.nodesDatatypes,"single",e(t,43,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,49,0,n.nodesIndexes,"single",e(t,51,0,"100%","none","Roboto Mono","0.80rem","500"))},function(e,t){e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length)})}function $n(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{host:0}),(e()(),al["\u0275eld"](1,0,[[1,0],["host",1]],null,0,"textarea",[["class","code"]],null,null,null,null,null))],null,null)}function Zn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,39,"mat-card",[["class","input-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n\t "])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","input-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n\t\t\t"])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","toolbar-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n\t\t\t"])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INPUT: SQL++"])),(e()(),al["\u0275ted"](-1,0,["\t\n\t\t\t"])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](18,0,null,0,12,"mat-card-content",[["class","content-area mat-card-content"]],null,null,null,null,null)),al["\u0275did"](19,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275eld"](21,0,null,null,8,"div",[["class","codemirror-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275eld"](23,0,null,null,5,"codemirror",[["class","code"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],function(e,t,n){var r=!0;return"ngModelChange"===t&&(r=!1!==(e.component.queryString=n)&&r),r},$n,mh)),al["\u0275did"](24,4374528,[["host",4]],0,hh,[],{config:[0,"config"]},null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[hh]),al["\u0275did"](26,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](28,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](32,0,null,0,7,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](33,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275eld"](35,0,null,null,3,"button",[["class","query-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](36,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](37,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["RUN"])),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,24,0,n.codemirrorConfig),e(t,26,0,n.queryString)},function(e,t){e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length),e(t,23,0,al["\u0275nov"](t,28).ngClassUntouched,al["\u0275nov"](t,28).ngClassTouched,al["\u0275nov"](t,28).ngClassPristine,al["\u0275nov"](t,28).ngClassDirty,al["\u0275nov"](t,28).ngClassValid,al["\u0275nov"](t,28).ngClassInvalid,al["\u0275nov"](t,28).ngClassPending),e(t,32,0,"end"===al["\u0275nov"](t,33).align),e(t,35,0,al["\u0275nov"](t,36).disabled||null)})}function Qn(e){return al["\u0275vid"](0,[],null,null)}function Yn(e){return al["\u0275vid"](0,[],null,null)}function Xn(e){return al["\u0275vid"](0,[],null,null)}function Jn(e){return al["\u0275vid"](0,[],null,null)}function er(e){return al["\u0275vid"](0,[],null,null)}function tr(e){return al["\u0275vid"](0,[],null,null)}function nr(e){return al["\u0275vid"](0,[],null,null)}function rr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"option",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.placeholder)})}function ir(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"option",[],[[8,"value",0],[8,"selected",0]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,0,0,t.context.$implicit.value,t.component.selectedOption==t.context.$implicit),e(t,1,0,t.context.$implicit.label)})}function or(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,10,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,7,"select",[["aria-hidden","true"],["tabindex","-1"]],[[8,"required",0],[1,"name",0],[1,"aria-label",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,rr)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ir)),al["\u0275did"](8,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,5,0,n.placeholder),e(t,8,0,n.options)},function(e,t){var n=t.component;e(t,2,0,n.required,n.name,n.selectedOption?n.selectedOption.label:" ")})}function lr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"label",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-dropdown-label ui-inputtext ui-corner-all":0,"ui-dropdown-label-empty":1}),(e()(),al["\u0275ted"](3,null,["",""]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,null==n.label||0===n.label.length))},function(e,t){e(t,3,0,t.component.label||"empty")})}function ar(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"label",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-dropdown-label ui-inputtext ui-corner-all ui-placeholder":0,"ui-dropdown-label-empty":1}),(e()(),al["\u0275ted"](3,null,["",""]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,null==n.placeholder||0===n.placeholder.length))},function(e,t){e(t,3,0,t.component.placeholder||"empty")})}function sr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[[6,0],["editableInput",1]],null,0,"input",[["class","ui-dropdown-label ui-inputtext ui-corner-all"],["type","text"]],[[1,"aria-label",0],[8,"disabled",0],[1,"placeholder",0]],[[null,"click"],[null,"input"],[null,"focus"],[null,"blur"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.onEditableInputClick(n)&&r),"input"===t&&(r=!1!==i.onEditableInputChange(n)&&r),"focus"===t&&(r=!1!==i.onEditableInputFocus(n)&&r),"blur"===t&&(r=!1!==i.onInputBlur(n)&&r),r},null,null))],null,function(e,t){var n=t.component;e(t,0,0,n.selectedOption?n.selectedOption.label:" ",n.disabled,n.placeholder)})}function ur(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"div",[["class","ui-dropdown-filter-container"]],null,[[null,"input"],[null,"click"]],function(e,t,n){var r=!0;return"input"===t&&(r=!1!==e.component.onFilter(n)&&r),"click"===t&&(r=!1!==n.stopPropagation()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](2,0,[[4,0],["filter",1]],null,0,"input",[["autocomplete","off"],["class","ui-dropdown-filter ui-inputtext ui-widget ui-state-default ui-corner-all"],["type","text"]],[[1,"placeholder",0]],[[null,"keydown.enter"],[null,"keydown"]],function(e,t,n){var r=!0,i=e.component;return"keydown.enter"===t&&(r=!1!==n.preventDefault()&&r),"keydown"===t&&(r=!1!==i.onKeydown(n)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](4,0,null,null,0,"span",[["class","fa fa-search"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "]))],null,function(e,t){e(t,2,0,t.component.filterPlaceholder)})}function cr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.label||"empty")})}function dr(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function pr(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](16777216,null,null,1,null,dr)),al["\u0275did"](1,212992,null,0,ah.TemplateWrapper,[al.ViewContainerRef],{item:[0,"item"],templateRef:[1,"templateRef"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.context.$implicit,t.component.itemTemplate)},null)}function fr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,9,"li",[],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onItemClick(n,e.context.$implicit)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-dropdown-item ui-corner-all":0,"ui-state-highlight":1,"ui-dropdown-item-empty":2}),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,cr)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,pr)),al["\u0275did"](8,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,n.selectedOption==t.context.$implicit,!t.context.$implicit.label||0===t.context.$implicit.label.length)),e(t,5,0,!n.itemTemplate),e(t,8,0,n.itemTemplate)},null)}function hr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"ul",[["class","ui-dropdown-items ui-dropdown-list ui-widget-content ui-widget ui-corner-all ui-helper-reset"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,fr)),al["\u0275did"](3,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){e(t,3,0,t.component.optionsToDisplay)},null)}function mr(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{containerViewChild:0}),al["\u0275qud"](402653184,2,{panelViewChild:0}),al["\u0275qud"](402653184,3,{itemsWrapperViewChild:0}),al["\u0275qud"](671088640,4,{filterViewChild:0}),al["\u0275qud"](402653184,5,{focusViewChild:0}),al["\u0275qud"](671088640,6,{editableInputViewChild:0}),(e()(),al["\u0275ted"](-1,null,["\n         "])),(e()(),al["\u0275eld"](7,0,[[1,0],["container",1]],null,41,"div",[],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onMouseclick(n)&&r),r},null,null)),al["\u0275did"](8,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](9,{"ui-dropdown ui-widget ui-state-default ui-corner-all ui-helper-clearfix":0,"ui-state-disabled":1,"ui-dropdown-open":2,"ui-state-focus":3}),al["\u0275did"](10,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,or)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](15,0,null,null,3,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](17,0,[[5,0],["in",1]],null,0,"input",[["readonly",""],["role","listbox"],["type","text"]],[[1,"id",0],[1,"aria-label",0],[8,"disabled",0],[1,"tabindex",0],[1,"autofocus",0]],[[null,"focus"],[null,"blur"],[null,"keydown"]],function(e,t,n){var r=!0,i=e.component;return"focus"===t&&(r=!1!==i.onInputFocus(n)&&r),"blur"===t&&(r=!1!==i.onInputBlur(n)&&r),"keydown"===t&&(r=!1!==i.onKeydown(n)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,lr)),al["\u0275did"](21,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ar)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,sr)),al["\u0275did"](27,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](29,0,null,null,4,"div",[["class","ui-dropdown-trigger ui-state-default ui-corner-right"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](31,0,null,null,1,"span",[["class","ui-clickable"]],null,null,null,null,null)),al["\u0275did"](32,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](35,0,[[2,0],["panel",1]],null,12,"div",[],[[24,"@panelState",0],[4,"display",null]],null,null,null,null)),al["\u0275did"](36,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275did"](37,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ur)),al["\u0275did"](40,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](42,0,[[3,0],["itemswrapper",1]],null,4,"div",[["class","ui-dropdown-items-wrapper"]],[[4,"max-height",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,hr)),al["\u0275did"](45,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,8,0,n.styleClass,e(t,9,0,!0,n.disabled,n.panelVisible,n.focus)),e(t,10,0,n.style),e(t,13,0,n.autoWidth),e(t,21,0,!n.editable&&null!=n.label),e(t,24,0,!n.editable&&null==n.label),e(t,27,0,n.editable),e(t,32,0,"ui-clickable",n.dropdownIcon),e(t,36,0,n.panelStyleClass,"ui-dropdown-panel ui-widget-content ui-corner-all ui-shadow"),e(t,37,0,n.panelStyle),e(t,40,0,n.filter),e(t,45,0,!n.lazy||n.panelVisible)},function(e,t){var n=t.component;e(t,17,0,n.inputId,n.selectedOption?n.selectedOption.label:" ",n.disabled,n.tabindex,n.autofocus),e(t,35,0,n.panelVisible?"visible":"hidden",n.panelVisible?"block":"none"),e(t,42,0,n.scrollHeight||"auto")})}function gr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"a",[["class","ui-paginator-page ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onPageLinkClick(n,e.context.$implicit-1)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-state-active":0}),(e()(),al["\u0275ted"](3,null,["",""]))],function(e,t){e(t,1,0,"ui-paginator-page ui-paginator-element ui-state-default ui-corner-all",e(t,2,0,t.context.$implicit-1==t.component.getPage()))},function(e,t){e(t,3,0,t.context.$implicit)})}function yr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,8,"p-dropdown",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"onChange"]],function(e,t,n){var r=!0,i=e.component;return"ngModelChange"===t&&(r=!1!==(i.rows=n)&&r),"onChange"===t&&(r=!1!==i.onRppChange(n)&&r),r},mr,Ih)),al["\u0275prd"](512,null,kh.DomHandler,kh.DomHandler,[]),al["\u0275prd"](512,null,Dh.ObjectUtils,Dh.ObjectUtils,[]),al["\u0275did"](3,13877248,null,1,Oh.Dropdown,[al.ElementRef,kh.DomHandler,al.Renderer2,al.ChangeDetectorRef,Dh.ObjectUtils,al.NgZone],{autoWidth:[0,"autoWidth"],lazy:[1,"lazy"],options:[2,"options"]},{onChange:"onChange"}),al["\u0275qud"](603979776,1,{templates:1}),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Oh.Dropdown]),al["\u0275did"](6,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](8,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null)],function(e,t){var n=t.component;e(t,3,0,!1,!1,n.rowsPerPageItems),e(t,6,0,n.rows)},function(e,t){e(t,0,0,al["\u0275nov"](t,8).ngClassUntouched,al["\u0275nov"](t,8).ngClassTouched,al["\u0275nov"](t,8).ngClassPristine,al["\u0275nov"](t,8).ngClassDirty,al["\u0275nov"](t,8).ngClassValid,al["\u0275nov"](t,8).ngClassInvalid,al["\u0275nov"](t,8).ngClassPending)})}function vr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,40,"div",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275did"](2,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](4,0,null,null,5,"a",[["class","ui-paginator-first ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToFirst(n)&&r),r},null,null)),al["\u0275did"](5,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](6,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](8,0,null,null,0,"span",[["class","fa fa-step-backward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](11,0,null,null,5,"a",[["class","ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToPrev(n)&&r),r},null,null)),al["\u0275did"](12,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](13,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](15,0,null,null,0,"span",[["class","fa fa-backward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](18,0,null,null,4,"span",[["class","ui-paginator-pages"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,gr)),al["\u0275did"](21,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](24,0,null,null,5,"a",[["class","ui-paginator-next ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToNext(n)&&r),r},null,null)),al["\u0275did"](25,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](26,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](28,0,null,null,0,"span",[["class","fa fa-forward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](31,0,null,null,5,"a",[["class","ui-paginator-last ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToLast(n)&&r),r},null,null)),al["\u0275did"](32,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](33,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](35,0,null,null,0,"span",[["class","fa fa-step-forward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,yr)),al["\u0275did"](39,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,n.styleClass,"ui-paginator ui-widget ui-widget-header ui-unselectable-text"),e(t,2,0,n.style),e(t,5,0,"ui-paginator-first ui-paginator-element ui-state-default ui-corner-all",e(t,6,0,n.isFirstPage())),e(t,12,0,"ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all",e(t,13,0,n.isFirstPage())),e(t,21,0,n.pageLinks),e(t,25,0,"ui-paginator-next ui-paginator-element ui-state-default ui-corner-all",e(t,26,0,n.isLastPage())),e(t,32,0,"ui-paginator-last ui-paginator-element ui-state-default ui-corner-all",e(t,33,0,n.isLastPage())),e(t,39,0,n.rowsPerPageOptions)},function(e,t){var n=t.component;e(t,4,0,n.isFirstPage()?-1:null),e(t,11,0,n.isFirstPage()?-1:null),e(t,24,0,n.isLastPage()?-1:null),e(t,31,0,n.isLastPage()?-1:null)})}function br(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,vr)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,!!n.alwaysShow||n.pageLinks&&n.pageLinks.length>1)},null)}function _r(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](1,0,null,null,15,"div",[["class","ui-radiobutton ui-widget"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](3,0,null,null,3,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](5,0,null,null,0,"input",[["type","radio"]],[[8,"checked",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](8,0,null,null,7,"div",[["class","ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default"]],null,[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.handleClick(n)&&r),"mouseenter"===t&&(r=0!=(i.hover=!0)&&r),"mouseleave"===t&&(r=0!=(i.hover=!1)&&r),r},null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](10,{"ui-state-hover":0,"ui-state-active":1}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](12,0,null,null,2,"span",[["class","ui-radiobutton-icon ui-clickable"]],null,null,null,null,null)),al["\u0275did"](13,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](14,{"fa fa-circle":0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,9,0,"ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default",e(t,10,0,n.hover,n.checked)),e(t,13,0,"ui-radiobutton-icon ui-clickable",e(t,14,0,n.checked))},function(e,t){e(t,5,0,t.component.checked)})}function wr(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](1,0,null,null,15,"div",[["class","ui-chkbox ui-widget"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](3,0,null,null,3,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](5,0,null,null,0,"input",[["type","checkbox"]],[[8,"checked",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](8,0,null,null,7,"div",[["class","ui-chkbox-box ui-widget ui-corner-all ui-state-default"]],null,[[null,"click"],[null,"mouseover"],[null,"mouseout"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.handleClick(n)&&r),"mouseover"===t&&(r=0!=(i.hover=!0)&&r),"mouseout"===t&&(r=0!=(i.hover=!1)&&r),r},null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](10,{"ui-state-hover":0,"ui-state-active":1,"ui-state-disabled":2}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](12,0,null,null,2,"span",[["class","ui-chkbox-icon ui-clickable"]],null,null,null,null,null)),al["\u0275did"](13,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](14,{"fa fa-check":0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,9,0,"ui-chkbox-box ui-widget ui-corner-all ui-state-default",e(t,10,0,n.hover&&!n.disabled,n.checked&&!n.disabled,n.disabled)),e(t,13,0,"ui-chkbox-icon ui-clickable",e(t,14,0,n.checked))},function(e,t){e(t,5,0,t.component.checked)})}function xr(e){return al["\u0275vid"](0,[],null,null)}function Cr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"span",[["class","ui-column-resizer ui-clickable"]],null,[[null,"mousedown"]],function(e,t,n){var r=!0;return"mousedown"===t&&(r=!1!==e.component.dt.initColumnResize(n)&&r),r},null,null))],null,null)}function Er(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-column-title"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.header)})}function Sr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[["class","ui-column-title"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-columnHeaderTemplateLoader",[],null,null,null,Xn,_h)),al["\u0275did"](3,245760,null,0,ah.ColumnHeaderTemplateLoader,[al.ViewContainerRef],{column:[0,"column"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){e(t,3,0,t.parent.context.$implicit)},null)}function Or(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"span",[["class","ui-sortable-column-icon fa fa-fw fa-sort"]],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"fa-sort-desc":0,"fa-sort-asc":1})],function(e,t){var n=t.component;e(t,1,0,"ui-sortable-column-icon fa fa-fw fa-sort",e(t,2,0,-1==n.dt.getSortOrder(t.parent.context.$implicit),1==n.dt.getSortOrder(t.parent.context.$implicit)))},null)}function Tr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"input",[["class","ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all"]],[[1,"type",0],[1,"maxlength",0],[1,"placeholder",0],[8,"value",0]],[[null,"click"],[null,"input"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.dt.onFilterInputClick(n)&&r),"input"===t&&(r=!1!==i.dt.onFilterKeyup(n.target.value,e.parent.context.$implicit.filterField||e.parent.context.$implicit.field,e.parent.context.$implicit.filterMatchMode)&&r),r},null,null))],null,function(e,t){var n=t.component;e(t,0,0,t.parent.context.$implicit.filterType,t.parent.context.$implicit.filterMaxlength,t.parent.context.$implicit.filterPlaceholder,n.dt.filters[t.parent.context.$implicit.filterField||t.parent.context.$implicit.field]?n.dt.filters[t.parent.context.$implicit.filterField||t.parent.context.$implicit.field].value:"")})}function kr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,16777216,null,null,1,"p-columnFilterTemplateLoader",[],null,null,null,er,xh)),al["\u0275did"](1,245760,null,0,ah.ColumnFilterTemplateLoader,[al.ViewContainerRef],{column:[0,"column"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.context.$implicit)},null)}function Dr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-dtCheckbox",[],null,[[null,"onChange"]],function(e,t,n){var r=!0;return"onChange"===t&&(r=!1!==e.component.dt.toggleRowsWithCheckbox(n)&&r),r},wr,Ph)),al["\u0275did"](1,49152,null,0,Sh.DTCheckbox,[],{checked:[0,"checked"],disabled:[1,"disabled"]},{onChange:"onChange"})],function(e,t){var n=t.component;e(t,1,0,n.dt.allSelected,n.dt.isEmpty())},null)}function Ir(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](1,0,[["headerCell",1]],null,25,"th",[],[[1,"id",0],[1,"colspan",0],[1,"rowspan",0],[1,"tabindex",0],[1,"scope",0]],[[null,"click"],[null,"dragstart"],[null,"dragleave"],[null,"drop"],[null,"mousedown"],[null,"keydown"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.dt.sort(n,e.context.$implicit)&&r),"dragstart"===t&&(r=!1!==i.dt.onColumnDragStart(n)&&r),"dragleave"===t&&(r=!1!==i.dt.onColumnDragleave(n)&&r),"drop"===t&&(r=!1!==i.dt.onColumnDrop(n)&&r),"mousedown"===t&&(r=!1!==i.dt.onHeaderMousedown(n,al["\u0275nov"](e,1))&&r),"keydown"===t&&(r=!1!==i.dt.onHeaderKeydown(n,e.context.$implicit)&&r),r},null,null)),al["\u0275did"](2,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](3,{"ui-state-default ui-unselectable-text":0,"ui-sortable-column":1,"ui-state-active":2,"ui-resizable-column":3,"ui-selection-column":4,"ui-helper-hidden":5}),al["\u0275did"](4,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Cr)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Er)),al["\u0275did"](10,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Sr)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Or)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Tr)),al["\u0275did"](19,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,kr)),al["\u0275did"](22,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Dr)),al["\u0275did"](25,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,2,0,t.context.$implicit.headerStyleClass||t.context.$implicit.styleClass,e(t,3,0,!0,t.context.$implicit.sortable,n.dt.isSorted(t.context.$implicit),n.dt.resizableColumns,t.context.$implicit.selectionMode,t.context.$implicit.hidden)),e(t,4,0,t.context.$implicit.headerStyle||t.context.$implicit.style),e(t,7,0,n.dt.resizableColumns&&("fit"==n.dt.columnResizeMode&&!t.context.last||"expand"==n.dt.columnResizeMode)),e(t,10,0,!t.context.$implicit.selectionMode&&!t.context.$implicit.headerTemplate),e(t,13,0,t.context.$implicit.headerTemplate),e(t,16,0,t.context.$implicit.sortable),e(t,19,0,t.context.$implicit.filter&&!t.context.$implicit.filterTemplate),e(t,22,0,t.context.$implicit.filter&&t.context.$implicit.filterTemplate),e(t,25,0,"multiple"==t.context.$implicit.selectionMode&&!0===n.dt.showHeaderCheckbox)},function(e,t){e(t,1,0,t.context.$implicit.colId,t.context.$implicit.colspan,t.context.$implicit.rowspan,t.context.$implicit.sortable?t.component.tabindex:null,t.context.$implicit.scope||(t.context.$implicit.colspan?"colgroup":"col"))})}function Rr(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ir)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){e(t,2,0,t.component.columns)},null)}function Mr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-column-footer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.footer)})}function Pr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[["class","ui-column-footer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-columnFooterTemplateLoader",[],null,null,null,Jn,wh)),al["\u0275did"](3,245760,null,0,ah.ColumnFooterTemplateLoader,[al.ViewContainerRef],{column:[0,"column"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,3,0,t.parent.context.$implicit)},null)}function Nr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,10,"td",[],[[1,"colspan",0],[1,"rowspan",0]],null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-state-default":0,"ui-helper-hidden":1}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Mr)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Pr)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){e(t,1,0,t.context.$implicit.footerStyleClass||t.context.$implicit.styleClass,e(t,2,0,!0,t.context.$implicit.hidden)),e(t,3,0,t.context.$implicit.footerStyle||t.context.$implicit.style),e(t,6,0,!t.context.$implicit.footerTemplate),e(t,9,0,t.context.$implicit.footerTemplate)},function(e,t){e(t,0,0,t.context.$implicit.colspan,t.context.$implicit.rowspan)})}function Ar(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Nr)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){e(t,2,0,t.component.columns)},null)}function Lr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"a",[["href","#"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.toggleRowGroup(n,e.parent.parent.context.$implicit)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[["class","fa fa-fw"]],null,null,null,null,null)),al["\u0275did"](3,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){var n=t.component;e(t,3,0,"fa fa-fw",n.dt.isRowGroupExpanded(t.parent.parent.context.$implicit)?n.dt.expandedIcon:n.dt.collapsedIcon)},null)}function Fr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[["rowGroupElement",1]],null,15,"tr",[["class","ui-widget-header ui-rowgroup-header"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.onRowGroupClick(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](2,{cursor:0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](4,0,null,null,10,"td",[],[[1,"colspan",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Lr)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](9,0,null,null,4,"span",[["class","ui-rowgroup-header-name"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](11,16777216,null,null,1,"p-templateLoader",[],null,null,null,nr,Eh)),al["\u0275did"](12,245760,null,0,ah.TemplateLoader,[al.ViewContainerRef],{template:[0,"template"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,n.dt.sortableRowGroup?"pointer":"auto")),e(t,7,0,n.dt.expandableRowGroups),e(t,12,0,n.dt.rowGroupHeaderTemplate,t.parent.context.$implicit)},function(e,t){e(t,4,0,t.component.dt.visibleColumns().length)})}function jr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-column-title"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.parent.context.$implicit.header)})}function Vr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-cell-data"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.dt.resolveFieldData(t.parent.parent.parent.parent.context.$implicit,t.parent.parent.context.$implicit.field))})}function zr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[["class","ui-cell-data"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-columnBodyTemplateLoader",[],null,null,null,Yn,bh)),al["\u0275did"](3,770048,null,0,ah.ColumnBodyTemplateLoader,[al.ViewContainerRef],{column:[0,"column"],rowData:[1,"rowData"],rowIndex:[2,"rowIndex"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,3,0,t.parent.parent.context.$implicit,t.parent.parent.parent.parent.context.$implicit,t.parent.parent.parent.parent.context.index+t.component.dt.first)},null)}function Br(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"input",[["class","ui-inputtext ui-widget ui-state-default ui-corner-all"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keydown"],[null,"blur"],[null,"input"],[null,"change"],[null,"compositionstart"],[null,"compositionend"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,1)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,1).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,1)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,1)._compositionEnd(n.target.value)&&r),"ngModelChange"===t&&(r=!1!==(e.parent.parent.parent.parent.parent.context.$implicit[e.parent.parent.parent.context.$implicit.field]=n)&&r),"keydown"===t&&(r=!1!==i.dt.onCellEditorKeydown(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),"blur"===t&&(r=!1!==i.dt.onCellEditorBlur(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),"input"===t&&(r=!1!==i.dt.onCellEditorInput(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),"change"===t&&(r=!1!==i.dt.onCellEditorChange(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),r},null,null)),al["\u0275did"](1,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](3,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](5,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null)],function(e,t){e(t,3,0,t.parent.parent.parent.parent.parent.context.$implicit[t.parent.parent.parent.context.$implicit.field])},function(e,t){e(t,0,0,al["\u0275nov"](t,5).ngClassUntouched,al["\u0275nov"](t,5).ngClassTouched,al["\u0275nov"](t,5).ngClassPristine,al["\u0275nov"](t,5).ngClassDirty,al["\u0275nov"](t,5).ngClassValid,al["\u0275nov"](t,5).ngClassInvalid,al["\u0275nov"](t,5).ngClassPending)})}function Hr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"a",[["class","ui-cell-editor-proxy-focus"],["href","#"]],null,[[null,"focus"]],function(e,t,n){var r=!0;return"focus"===t&&(r=!1!==e.component.dt.onCustomEditorFocusPrev(n,e.parent.parent.parent.context.index)&&r),r},null,null))],null,null)}function Wr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,16777216,null,null,1,"p-columnEditorTemplateLoader",[],null,null,null,tr,Ch)),al["\u0275did"](1,245760,null,0,ah.ColumnEditorTemplateLoader,[al.ViewContainerRef],{column:[0,"column"],rowData:[1,"rowData"],rowIndex:[2,"rowIndex"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.parent.parent.context.$implicit,t.parent.parent.parent.parent.parent.context.$implicit,t.parent.parent.parent.parent.parent.context.index)},null)}function qr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"a",[["class","ui-cell-editor-proxy-focus"],["href","#"]],null,[[null,"focus"]],function(e,t,n){var r=!0;return"focus"===t&&(r=!1!==e.component.dt.onCustomEditorFocusNext(n,e.parent.parent.parent.context.index)&&r),r},null,null))],null,null)}function Ur(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,13,"div",[["class","ui-cell-editor"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Br)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Hr)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Wr)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,qr)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,3,0,!t.parent.parent.context.$implicit.editorTemplate),e(t,6,0,t.parent.parent.context.$implicit.editorTemplate),e(t,9,0,t.parent.parent.context.$implicit.editorTemplate),e(t,12,0,t.parent.parent.context.$implicit.editorTemplate)},null)}function Gr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"a",[["href","#"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.toggleRow(e.parent.parent.parent.parent.context.$implicit,n)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[["class","ui-row-toggler fa fa-fw ui-clickable"]],null,null,null,null,null)),al["\u0275did"](3,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){var n=t.component;e(t,3,0,"ui-row-toggler fa fa-fw ui-clickable",n.dt.isRowExpanded(t.parent.parent.parent.parent.context.$implicit)?n.dt.expandedIcon:n.dt.collapsedIcon)},null)}function Kr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-dtRadioButton",[],null,[[null,"onClick"]],function(e,t,n){var r=!0;return"onClick"===t&&(r=!1!==e.component.dt.selectRowWithRadio(n,e.parent.parent.parent.parent.context.$implicit)&&r),r},_r,Mh)),al["\u0275did"](1,49152,null,0,Sh.DTRadioButton,[],{checked:[0,"checked"]},{onClick:"onClick"})],function(e,t){e(t,1,0,t.component.dt.isSelected(t.parent.parent.parent.parent.context.$implicit))},null)}function $r(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-dtCheckbox",[],null,[[null,"onChange"]],function(e,t,n){var r=!0;return"onChange"===t&&(r=!1!==e.component.dt.toggleRowWithCheckbox(n,e.parent.parent.parent.parent.context.$implicit)&&r),r},wr,Ph)),al["\u0275did"](1,49152,null,0,Sh.DTCheckbox,[],{checked:[0,"checked"]},{onChange:"onChange"})],function(e,t){e(t,1,0,t.component.dt.isSelected(t.parent.parent.parent.parent.context.$implicit))},null)}function Zr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[["cell",1]],null,25,"td",[],[[1,"rowspan",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.switchCellToEditMode(al["\u0275nov"](e,0),e.parent.context.$implicit,e.parent.parent.parent.context.$implicit)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-editable-column":0,"ui-selection-column":1,"ui-helper-hidden":2}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,jr)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Vr)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,zr)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ur)),al["\u0275did"](15,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Gr)),al["\u0275did"](18,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Kr)),al["\u0275did"](21,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,$r)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){var n=t.component;e(t,1,0,t.parent.context.$implicit.bodyStyleClass||t.parent.context.$implicit.styleClass,e(t,2,0,t.parent.context.$implicit.editable,t.parent.context.$implicit.selectionMode,t.parent.context.$implicit.hidden)),e(t,3,0,t.parent.context.$implicit.bodyStyle||t.parent.context.$implicit.style),e(t,6,0,n.dt.responsive),e(t,9,0,!t.parent.context.$implicit.bodyTemplate&&!t.parent.context.$implicit.expander&&!t.parent.context.$implicit.selectionMode),e(t,12,0,t.parent.context.$implicit.bodyTemplate),e(t,15,0,t.parent.context.$implicit.editable),e(t,18,0,t.parent.context.$implicit.expander),e(t,21,0,"single"==t.parent.context.$implicit.selectionMode),e(t,24,0,"multiple"==t.parent.context.$implicit.selectionMode)},function(e,t){var n=t.component;e(t,0,0,"rowspan"==n.dt.rowGroupMode&&n.dt.sortField==t.parent.context.$implicit.field&&n.dt.rowGroupMetadata[n.dt.resolveFieldData(t.parent.parent.parent.context.$implicit,n.dt.sortField)].index==t.parent.parent.parent.context.index?n.dt.rowGroupMetadata[n.dt.resolveFieldData(t.parent.parent.parent.context.$implicit,n.dt.sortField)].size:null)})}function Qr(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Zr)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){var n=t.component;e(t,2,0,!n.dt.rowGroupMode||"subheader"==n.dt.rowGroupMode||"rowspan"==n.dt.rowGroupMode&&(n.dt.sortField==t.context.$implicit.field&&n.dt.rowGroupMetadata[n.dt.resolveFieldData(t.parent.parent.context.$implicit,n.dt.sortField)].index==t.parent.parent.context.index||n.dt.sortField!=t.context.$implicit.field))},null)}function Yr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[["rowElement",1]],null,6,"tr",[],null,[[null,"click"],[null,"dblclick"],[null,"contextmenu"],[null,"touchend"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.dt.handleRowClick(n,e.parent.context.$implicit,e.parent.context.index)&&r),"dblclick"===t&&(r=!1!==i.dt.rowDblclick(n,e.parent.context.$implicit)&&r),"contextmenu"===t&&(r=!1!==i.dt.onRowRightClick(n,e.parent.context.$implicit)&&r),"touchend"===t&&(r=!1!==i.dt.handleRowTouchEnd(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pad"](2,5),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Qr)),al["\u0275did"](5,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,t.parent.context.even&&"rowspan"!=n.dt.rowGroupMode?"ui-datatable-even":"",t.parent.context.odd&&"rowspan"!=n.dt.rowGroupMode?"ui-datatable-odd":"",n.dt.isSelected(t.parent.context.$implicit)?"ui-state-highlight":"",n.dt.isRowExpanded(t.parent.context.$implicit)?"ui-expanded-row":"",n.dt.getRowStyleClass(t.parent.context.$implicit,t.parent.context.index))),e(t,5,0,n.columns)},null)}function Xr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"tr",[["class","ui-expanded-row-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,4,"td",[],[[1,"colspan",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](4,16777216,null,null,1,"p-rowExpansionLoader",[],null,null,null,xr,Nh)),al["\u0275did"](5,245760,null,0,Sh.RowExpansionLoader,[al.ViewContainerRef],{template:[0,"template"],rowData:[1,"rowData"],rowIndex:[2,"rowIndex"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,5,0,t.component.dt.rowExpansionTemplate,t.parent.context.$implicit,t.parent.context.index)},function(e,t){e(t,2,0,t.component.dt.visibleColumns().length)})}function Jr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"tr",[["class","ui-widget-header ui-rowgroup-footer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-templateLoader",[["class","ui-helper-hidden"]],null,null,null,nr,Eh)),al["\u0275did"](3,245760,null,0,ah.TemplateLoader,[al.ViewContainerRef],{template:[0,"template"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,3,0,t.component.dt.rowGroupFooterTemplate,t.parent.context.$implicit)},null)}function ei(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Fr)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Yr)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Xr)),al["\u0275did"](8,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Jr)),al["\u0275did"](11,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,2,0,"subheader"==n.dt.rowGroupMode&&(0===t.context.index||n.dt.resolveFieldData(t.context.$implicit,n.dt.groupField)!==n.dt.resolveFieldData(n.dt.dataToRender[t.context.index-1],n.dt.groupField))),e(t,5,0,!n.dt.expandableRowGroups||n.dt.isRowGroupExpanded(t.context.$implicit)),e(t,8,0,n.dt.expandableRows&&n.dt.isRowExpanded(t.context.$implicit)),e(t,11,0,n.dt.rowGroupFooterTemplate&&"subheader"==n.dt.rowGroupMode&&(t.context.index===n.dt.dataToRender.length-1||n.dt.resolveFieldData(t.context.$implicit,n.dt.groupField)!==n.dt.resolveFieldData(n.dt.dataToRender[t.context.index+1],n.dt.groupField))&&(!n.dt.expandableRowGroups||n.dt.isRowGroupExpanded(t.context.$implicit)))},null)}function ti(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.dt.emptyMessage)})}function ni(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,10,"tr",[["class","ui-widget-content ui-datatable-emptymessage-row"]],[[4,"visibility",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](2,0,null,null,7,"td",[["class","ui-datatable-emptymessage"]],[[1,"colspan",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ti)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](7,16777216,null,null,1,"p-templateLoader",[],null,null,null,nr,Eh)),al["\u0275did"](8,245760,null,0,ah.TemplateLoader,[al.ViewContainerRef],{template:[0,"template"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,5,0,!n.dt.emptyMessageTemplate),e(t,8,0,n.dt.emptyMessageTemplate)},function(e,t){var n=t.component;e(t,0,0,n.dt.loading?"hidden":"visible"),e(t,2,0,n.dt.visibleColumns().length)})}function ri(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ei)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(e()(),al["\u0275ted"](-1,null,["\n\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ni)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,n.data,n.dt.rowTrackBy),e(t,5,0,n.dt.isEmpty())},null)}function ii(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function oi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function li(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,oi)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.headerColumnGroup.rows)},null)}function ai(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"tbody",[],null,null,null,ri,Fh)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-datatable-data ui-widget-content":0,"ui-datatable-hoverable-rows":1}),al["\u0275did"](3,49152,null,0,Sh.TableBody,[Sh.DataTable],{columns:[0,"columns"],data:[1,"data"]},null)],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,n.dt.rowHover||n.dt.selectionMode)),e(t,3,0,n.columns,n.dt.frozenValue)},null)}function si(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"col",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-helper-hidden":0}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null)],function(e,t){e(t,1,0,e(t,2,0,t.context.$implicit.hidden)),e(t,3,0,t.context.$implicit.headerStyle||t.context.$implicit.style)},null)}function ui(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function ci(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function di(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ci)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.footerColumnGroup.rows)},null)}function pi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[[6,0],["scrollFooter",1]],null,20,"div",[["class","ui-widget-header ui-datatable-scrollable-footer"]],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](2,{width:0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](4,0,[[7,0],["scrollFooterBox",1]],null,15,"div",[["class","ui-datatable-scrollable-footer-box"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](6,0,null,null,12,"table",[],null,null,null,null,null)),al["\u0275did"](7,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](8,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](10,0,null,null,7,"tfoot",[["class","ui-datatable-tfoot"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ui)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,di)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,n.width)),e(t,7,0,n.dt.tableStyleClass),e(t,8,0,n.dt.tableStyle),e(t,13,0,!n.footerColumnGroup),e(t,16,0,n.footerColumnGroup)},null)}function fi(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{scrollHeaderViewChild:0}),al["\u0275qud"](402653184,2,{scrollHeaderBoxViewChild:0}),al["\u0275qud"](402653184,3,{scrollBodyViewChild:0}),al["\u0275qud"](402653184,4,{scrollTableViewChild:0}),al["\u0275qud"](402653184,5,{scrollTableWrapperViewChild:0}),al["\u0275qud"](671088640,6,{scrollFooterViewChild:0}),al["\u0275qud"](671088640,7,{scrollFooterBoxViewChild:0}),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](8,0,[[1,0],["scrollHeader",1]],null,23,"div",[["class","ui-widget-header ui-datatable-scrollable-header"]],null,null,null,null,null)),al["\u0275did"](9,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](10,{width:0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](12,0,[[2,0],["scrollHeaderBox",1]],null,18,"div",[["class","ui-datatable-scrollable-header-box"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](14,0,null,null,15,"table",[],null,null,null,null,null)),al["\u0275did"](15,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](16,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](18,0,null,null,7,"thead",[["class","ui-datatable-thead"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ii)),al["\u0275did"](21,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,li)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ai)),al["\u0275did"](28,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](33,0,[[3,0],["scrollBody",1]],null,23,"div",[["class","ui-datatable-scrollable-body"]],null,null,null,null,null)),al["\u0275did"](34,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](35,{width:0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](37,0,[[5,0],["scrollTableWrapper",1]],null,18,"div",[["class","ui-datatable-scrollable-table-wrapper"],["style","position:relative"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](39,0,[[4,0],["scrollTable",1]],null,15,"table",[["style","top:0px"]],null,null,null,null,null)),al["\u0275did"](40,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](41,{"ui-datatable-virtual-table":0}),al["\u0275did"](42,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](44,0,null,null,4,"colgroup",[["class","ui-datatable-scrollable-colgroup"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,si)),al["\u0275did"](47,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](50,0,null,null,3,"tbody",[],null,null,null,ri,Fh)),al["\u0275did"](51,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](52,{"ui-datatable-data ui-widget-content":0,"ui-datatable-hoverable-rows":1}),al["\u0275did"](53,49152,null,0,Sh.TableBody,[Sh.DataTable],{columns:[0,"columns"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,pi)),al["\u0275did"](59,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,9,0,e(t,10,0,n.width)),e(t,15,0,n.dt.tableStyleClass),e(t,16,0,n.dt.tableStyle),e(t,21,0,!n.headerColumnGroup),e(t,24,0,n.headerColumnGroup),e(t,28,0,n.dt.frozenValue),e(t,34,0,e(t,35,0,n.width)),e(t,40,0,n.dt.tableStyleClass,e(t,41,0,n.virtualScroll)),e(t,42,0,n.dt.tableStyle),e(t,47,0,n.columns),e(t,51,0,e(t,52,0,!0,n.dt.rowHover||n.dt.selectionMode)),e(t,53,0,n.columns,n.dt.dataToRender),e(t,59,0,n.dt.hasFooter())},null)}function hi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"div",[["class","ui-datatable-loading ui-widget-overlay"]],null,null,null,null,null))],null,null)}function mi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-loading-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,function(e,t){e(t,2,0,"fa fa-spin fa-2x "+t.component.loadingIcon)})}function gi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-header ui-widget-header"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),al["\u0275ncd"](null,0),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,null)}function yi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-paginator",[["styleClass","ui-paginator-top"]],null,[[null,"onPageChange"]],function(e,t,n){var r=!0;return"onPageChange"===t&&(r=!1!==e.component.onPageChange(n)&&r),r},br,Rh)),al["\u0275did"](1,49152,null,0,Th.Paginator,[],{pageLinkSize:[0,"pageLinkSize"],styleClass:[1,"styleClass"],alwaysShow:[2,"alwaysShow"],totalRecords:[3,"totalRecords"],first:[4,"first"],rows:[5,"rows"],rowsPerPageOptions:[6,"rowsPerPageOptions"]},{onPageChange:"onPageChange"})],function(e,t){var n=t.component;e(t,1,0,n.pageLinks,"ui-paginator-top",n.alwaysShowPaginator,n.totalRecords,n.first,n.rows,n.rowsPerPageOptions)},null)}function vi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function bi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function _i(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,bi)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.headerColumnGroups.first.rows)},null)}function wi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function xi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function Ci(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,xi)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.footerColumnGroups.first.rows)},null)}function Ei(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"tfoot",[["class","ui-datatable-tfoot"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,wi)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ci)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){var n=t.component;e(t,3,0,!n.footerColumnGroups.first),e(t,6,0,n.footerColumnGroups.first)},null)}function Si(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,23,"div",[["class","ui-datatable-tablewrapper"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,20,"table",[],null,null,null,null,null)),al["\u0275did"](3,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](4,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](6,0,null,null,7,"thead",[["class","ui-datatable-thead"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,vi)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,_i)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ei)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](18,0,null,null,3,"tbody",[],null,null,null,ri,Fh)),al["\u0275did"](19,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](20,{"ui-datatable-data ui-widget-content":0,"ui-datatable-hoverable-rows":1}),al["\u0275did"](21,49152,null,0,Sh.TableBody,[Sh.DataTable],{columns:[0,"columns"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,3,0,n.tableStyleClass),e(t,4,0,n.tableStyle),e(t,9,0,!n.headerColumnGroups.first),e(t,12,0,n.headerColumnGroups.first),e(t,16,0,n.hasFooter()),e(t,19,0,e(t,20,0,!0,n.rowHover||n.selectionMode)),e(t,21,0,n.columns,n.dataToRender)},null)}function Oi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-scrollable-view ui-datatable-frozen-view"],["frozen","true"]],null,null,null,fi,jh)),al["\u0275did"](1,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](2,{width:0}),al["\u0275did"](3,12763136,null,0,Sh.ScrollableView,[Sh.DataTable,kh.DomHandler,al.ElementRef,al.Renderer2,al.NgZone],{columns:[0,"columns"],headerColumnGroup:[1,"headerColumnGroup"],footerColumnGroup:[2,"footerColumnGroup"],frozen:[3,"frozen"]},null)],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,n.frozenWidth)),e(t,3,0,n.frozenColumns,n.frozenHeaderColumnGroup,n.frozenFooterColumnGroup,"true")},null)}function Ti(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](1,0,null,null,11,"div",[["class","ui-datatable-scrollable-wrapper ui-helper-clearfix"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Oi)),al["\u0275did"](4,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](6,0,null,null,5,"div",[["class","ui-datatable-scrollable-view"]],null,[[null,"onVirtualScroll"]],function(e,t,n){var r=!0;return"onVirtualScroll"===t&&(r=!1!==e.component.onVirtualScroll(n)&&r),r},fi,jh)),al["\u0275did"](7,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](8,{"ui-datatable-unfrozen-view":0}),al["\u0275did"](9,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](10,{width:0,left:1}),al["\u0275did"](11,12763136,null,0,Sh.ScrollableView,[Sh.DataTable,kh.DomHandler,al.ElementRef,al.Renderer2,al.NgZone],{columns:[0,"columns"],headerColumnGroup:[1,"headerColumnGroup"],footerColumnGroup:[2,"footerColumnGroup"],virtualScroll:[3,"virtualScroll"]},{onVirtualScroll:"onVirtualScroll"}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,4,0,n.hasFrozenColumns()),e(t,7,0,"ui-datatable-scrollable-view",e(t,8,0,n.hasFrozenColumns())),e(t,9,0,e(t,10,0,n.unfrozenWidth,n.frozenWidth)),e(t,11,0,n.scrollableColumns,n.scrollableHeaderColumnGroup,n.scrollableFooterColumnGroup,n.virtualScroll)},null)}function ki(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-paginator",[["styleClass","ui-paginator-bottom"]],null,[[null,"onPageChange"]],function(e,t,n){var r=!0;return"onPageChange"===t&&(r=!1!==e.component.onPageChange(n)&&r),r},br,Rh)),al["\u0275did"](1,49152,null,0,Th.Paginator,[],{pageLinkSize:[0,"pageLinkSize"],styleClass:[1,"styleClass"],alwaysShow:[2,"alwaysShow"],totalRecords:[3,"totalRecords"],first:[4,"first"],rows:[5,"rows"],rowsPerPageOptions:[6,"rowsPerPageOptions"]},{onPageChange:"onPageChange"})],function(e,t){var n=t.component;e(t,1,0,n.pageLinks,"ui-paginator-bottom",n.alwaysShowPaginator,n.totalRecords,n.first,n.rows,n.rowsPerPageOptions)},null)}function Di(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-footer ui-widget-header"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),al["\u0275ncd"](null,1),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,null)}function Ii(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](1,0,null,null,34,"div",[],[[4,"width",null]],null,null,null,null)),al["\u0275did"](2,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](3,{"ui-datatable ui-widget":0,"ui-datatable-reflow":1,"ui-datatable-stacked":2,"ui-datatable-resizable":3,"ui-datatable-scrollable":4}),al["\u0275did"](4,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,hi)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,mi)),al["\u0275did"](10,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,gi)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,yi)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Si)),al["\u0275did"](19,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            \n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ti)),al["\u0275did"](22,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            \n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ki)),al["\u0275did"](25,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Di)),al["\u0275did"](28,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            \n            "])),(e()(),al["\u0275eld"](30,0,null,null,0,"div",[["class","ui-column-resizer-helper ui-state-highlight"],["style","display:none"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](32,0,null,null,0,"span",[["class","fa fa-arrow-down ui-datatable-reorder-indicator-up"],["style","position: absolute; display: none;"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](34,0,null,null,0,"span",[["class","fa fa-arrow-up ui-datatable-reorder-indicator-down"],["style","position: absolute; display: none;"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,n.styleClass,e(t,3,0,!0,n.responsive,n.stacked,n.resizableColumns,n.scrollable)),e(t,4,0,n.style),e(t,7,0,n.loading),e(t,10,0,n.loading),e(t,13,0,n.header),e(t,16,0,n.paginator&&("top"===n.paginatorPosition||"both"==n.paginatorPosition)),e(t,19,0,!n.scrollable),e(t,22,0,n.scrollable),e(t,25,0,n.paginator&&("bottom"===n.paginatorPosition||"both"==n.paginatorPosition)),e(t,28,0,n.footer)},function(e,t){e(t,1,0,t.component.containerWidth)})}function Ri(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_inputElement:0}),(e()(),al["\u0275eld"](1,0,null,null,3,"label",[["class","mat-button-toggle-label"]],[[1,"for",0]],null,null,null,null)),(e()(),al["\u0275eld"](2,0,[[1,0],["input",1]],null,0,"input",[["class","mat-button-toggle-input cdk-visually-hidden"]],[[8,"type",0],[8,"id",0],[8,"checked",0],[8,"disabled",0],[8,"name",0],[1,"aria-label",0],[1,"aria-labelledby",0]],[[null,"change"],[null,"click"]],function(e,t,n){var r=!0,i=e.component;return"change"===t&&(r=!1!==i._onInputChange(n)&&r),"click"===t&&(r=!1!==i._onInputClick(n)&&r),r},null,null)),(e()(),al["\u0275eld"](3,0,null,null,1,"div",[["class","mat-button-toggle-label-content"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](5,0,null,null,0,"div",[["class","mat-button-toggle-focus-overlay"]],null,null,null,null,null))],null,function(e,t){var n=t.component;e(t,1,0,n.inputId),e(t,2,0,n._type,n.inputId,n.checked,n.disabled||null,n.name,n.ariaLabel,n.ariaLabelledby)})}function Mi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,6,"p-column",[],null,null,null,Qn,vh)),al["\u0275did"](1,1097728,[[5,4]],2,ah.Column,[],{field:[0,"field"],header:[1,"header"],sortable:[2,"sortable"],style:[3,"style"],headerStyleClass:[4,"headerStyleClass"],footerStyle:[5,"footerStyle"]},null),al["\u0275qud"](603979776,8,{templates:1}),al["\u0275qud"](335544320,9,{template:0}),al["\u0275pod"](4,{"text-align":0,"text-overflow":1,"word-wrap":2,"word-break":3}),al["\u0275pod"](5,{color:0}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"]))],function(e,t){var n=t.component;e(t,1,0,t.context.$implicit.field,t.context.$implicit.header,!0,e(t,4,0,"left","ellipsis","break-word","break-all"),n.datatable-n.header,e(t,5,0,"blue"))},null)}function Pi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,18,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\t\t\t\t\n\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,15,"p-dataTable",[["id","review-table"]],[[8,"hidden",0]],null,null,Ii,Vh)),al["\u0275prd"](512,null,kh.DomHandler,kh.DomHandler,[]),al["\u0275prd"](512,null,Dh.ObjectUtils,Dh.ObjectUtils,[]),al["\u0275did"](5,14139392,null,6,Sh.DataTable,[al.ElementRef,kh.DomHandler,al.IterableDiffers,al.Renderer2,al.ChangeDetectorRef,Dh.ObjectUtils,al.NgZone],{paginator:[0,"paginator"],rows:[1,"rows"],pageLinks:[2,"pageLinks"],rowsPerPageOptions:[3,"rowsPerPageOptions"],responsive:[4,"responsive"],style:[5,"style"],value:[6,"value"]},null),al["\u0275qud"](335544320,2,{header:0}),al["\u0275qud"](335544320,3,{footer:0}),al["\u0275qud"](603979776,4,{templates:1}),al["\u0275qud"](603979776,5,{cols:1}),al["\u0275qud"](603979776,6,{headerColumnGroups:1}),al["\u0275qud"](603979776,7,{footerColumnGroups:1}),al["\u0275pad"](12,6),al["\u0275pod"](13,{width:0,overflow:1}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Mi)),al["\u0275did"](16,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],function(e,t){var n=t.component;e(t,5,0,!0,20,3,e(t,12,0,5,10,20,30,40,50),!0,e(t,13,0,"100%","hidden"),n.data),e(t,16,0,n.dataColumns)},function(e,t){e(t,2,0,t.component.loading)})}function Ni(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Pi)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"]))],function(e,t){e(t,3,0,"TABLE"==t.component.selectedOutputView)},null)}function Ai(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"div",[["class","queryErrorMessage"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["ERROR:"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](5,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](6,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],null,function(e,t){e(t,6,0,t.component.queryMessage)})}function Li(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,9,"div",[["class","data-viewer-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,3,"button",[["class","button-export mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.exportToText()&&r),r},J,nc)),al["\u0275did"](3,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](4,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["EXPORT"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](7,0,null,null,1,"pre",[["class","json-output"]],null,null,null,null,null)),(e()(),al["\u0275ted"](8,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"]))],null,function(e,t){var n=t.component;e(t,2,0,al["\u0275nov"](t,3).disabled||null),e(t,8,0,n.jsonOutput)})}function Fi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\t\n\t\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Li)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],function(e,t){e(t,3,0,"JSON"==t.component.selectedOutputView)},null)}function ji(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,21,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\t\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ai)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\t\n\t\t\t "])),(e()(),al["\u0275eld"](5,0,null,null,11,"div",[["class","data-viewer-container"]],[[8,"hidden",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](7,0,null,null,3,"button",[["class","button-expand mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.expandTree()&&r),r},J,nc)),al["\u0275did"](8,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](9,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](10,0,["",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](12,0,null,null,3,"p-tree",[],null,null,null,Gn,dh)),al["\u0275did"](13,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],style:[1,"style"]},null),al["\u0275qud"](603979776,10,{templates:1}),al["\u0275pod"](15,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,Fi)),al["\u0275did"](19,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t\t"]))],function(e,t){var n=t.component;e(t,3,0,t.context.ngIf.sqlQueryError.metrics),e(t,13,0,n.treeData,e(t,15,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,19,0,al["\u0275unv"](t,19,0,al["\u0275nov"](t,20).transform(n.loaded$)))},function(e,t){var n=t.component;e(t,5,0,"TREE"!=n.selectedOutputView),e(t,7,0,al["\u0275nov"](t,8).disabled||null),e(t,10,0,n.toogleExpand)})}function Vi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,36,"span",[["class","metrics"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["SUCCESS:"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](5,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](6,null,["Count: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](8,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](9,null,["Size: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](11,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](12,null,["Elapsed time: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](14,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](15,null,["Execution time: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](17,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](19,0,null,null,16,"mat-button-toggle-group",[["class","output-group mat-button-toggle-group"],["role","radiogroup"]],[[2,"mat-button-toggle-vertical",null]],[[null,"change"]],function(e,t,n){var r=!0;return"change"===t&&(r=!1!==e.component.onSelect(al["\u0275nov"](e,21).value)&&r),r},null,null)),al["\u0275prd"](5120,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Wh]),al["\u0275did"](21,16384,[["group",4]],1,Wh,[al.ChangeDetectorRef],{value:[0,"value"]},{change:"change"}),al["\u0275qud"](603979776,11,{_buttonToggles:1}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](24,0,null,null,2,"mat-button-toggle",[["class","mat-button-toggle"],["mat-button",""],["value","TABLE"]],[[2,"mat-button-toggle-standalone",null],[2,"mat-button-toggle-checked",null],[2,"mat-button-toggle-disabled",null],[1,"id",0]],null,null,Ri,Kh)),al["\u0275did"](25,245760,[[11,4]],0,Uh,[[2,Wh],[2,qh],al.ChangeDetectorRef,Vc,al.ElementRef,La],{value:[0,"value"]},null),(e()(),al["\u0275ted"](-1,0,["TABLE"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](28,0,null,null,2,"mat-button-toggle",[["class","mat-button-toggle"],["mat-button",""],["value","TREE"]],[[2,"mat-button-toggle-standalone",null],[2,"mat-button-toggle-checked",null],[2,"mat-button-toggle-disabled",null],[1,"id",0]],null,null,Ri,Kh)),al["\u0275did"](29,245760,[[11,4]],0,Uh,[[2,Wh],[2,qh],al.ChangeDetectorRef,Vc,al.ElementRef,La],{value:[0,"value"]},null),(e()(),al["\u0275ted"](-1,0,["TREE"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](32,0,null,null,2,"mat-button-toggle",[["class","mat-button-toggle"],["mat-button",""],["value","JSON"]],[[2,"mat-button-toggle-standalone",null],[2,"mat-button-toggle-checked",null],[2,"mat-button-toggle-disabled",null],[1,"id",0]],null,null,Ri,Kh)),al["\u0275did"](33,245760,[[11,4]],0,Uh,[[2,Wh],[2,qh],al.ChangeDetectorRef,Vc,al.ElementRef,La],{value:[0,"value"]},null),(e()(),al["\u0275ted"](-1,0,["JSON"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],function(e,t){e(t,21,0,al["\u0275inlineInterpolate"](1,"",t.component.selectedOutput,"")),e(t,25,0,"TABLE"),e(t,29,0,"TREE"),e(t,33,0,"JSON")},function(e,t){e(t,6,0,t.parent.context.ngIf.sqlQueryResult.metrics.resultCount),e(t,9,0,t.parent.context.ngIf.sqlQueryResult.metrics.resultSize),e(t,12,0,t.parent.context.ngIf.sqlQueryResult.metrics.elapsedTime),e(t,15,0,t.parent.context.ngIf.sqlQueryResult.metrics.executionTime),e(t,19,0,al["\u0275nov"](t,21).vertical),e(t,24,0,!al["\u0275nov"](t,25).buttonToggleGroup&&!al["\u0275nov"](t,25).buttonToggleGroupMultiple,al["\u0275nov"](t,25).checked,al["\u0275nov"](t,25).disabled,al["\u0275nov"](t,25).id),e(t,28,0,!al["\u0275nov"](t,29).buttonToggleGroup&&!al["\u0275nov"](t,29).buttonToggleGroupMultiple,al["\u0275nov"](t,29).checked,al["\u0275nov"](t,29).disabled,al["\u0275nov"](t,29).id),e(t,32,0,!al["\u0275nov"](t,33).buttonToggleGroup&&!al["\u0275nov"](t,33).buttonToggleGroupMultiple,al["\u0275nov"](t,33).checked,al["\u0275nov"](t,33).disabled,al["\u0275nov"](t,33).id)})}function zi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Vi)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"]))],function(e,t){e(t,3,0,t.context.ngIf.sqlQueryResult.metrics)},null)}function Bi(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,36,"mat-card",[["class","sql-results-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","results-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n\t\t"])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","toolbar-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n\t    "])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[["class","output-query-string"]],null,null,null,null,null)),(e()(),al["\u0275ted"](13,null,["OUTPUT",""])),(e()(),al["\u0275ted"](-1,0,["\n\t\t"])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n  \t"])),(e()(),al["\u0275eld"](18,0,null,0,10,"mat-card-content",[["class","content-area mat-card-content"]],null,null,null,null,null)),al["\u0275did"](19,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,Ni)),al["\u0275did"](22,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,ji)),al["\u0275did"](26,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](30,0,null,0,6,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](31,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,zi)),al["\u0275did"](34,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,22,0,al["\u0275unv"](t,22,0,al["\u0275nov"](t,23).transform(n.loaded$))),e(t,26,0,al["\u0275unv"](t,26,0,al["\u0275nov"](t,27).transform(n.loaded$))),e(t,34,0,al["\u0275unv"](t,34,0,al["\u0275nov"](t,35).transform(n.loaded$)))},function(e,t){var n=t.component;e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length),e(t,13,0,n.outputQueryString),e(t,30,0,"end"===al["\u0275nov"](t,31).align)})}function Hi(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n\n"])),(e()(),al["\u0275eld"](1,0,null,null,16,"div",[["class","query-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](3,0,null,null,4,"div",[["class","metadata"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["   \n    "])),(e()(),al["\u0275eld"](5,0,null,null,1,"awc-metadata",[["class","metadata-card"]],null,null,null,Kn,fh)),al["\u0275did"](6,114688,null,0,ph,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](9,0,null,null,7,"div",[["class","vertical"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](11,0,null,null,1,"awc-query",[["class","query-card"]],null,null,null,Zn,yh)),al["\u0275did"](12,49152,null,0,gh,[Yp.m],null,null),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](14,0,null,null,1,"awc-results",[["class","output-card"]],null,null,null,Bi,Qh)),al["\u0275did"](15,114688,null,0,Zh,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,[" \n\n"]))],function(e,t){e(t,6,0),e(t,15,0)},null)}function Wi(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{dataverses:0}),al["\u0275qud"](402653184,2,{datasets:0}),al["\u0275qud"](402653184,3,{datatypes:0}),al["\u0275qud"](402653184,4,{indexes:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](5,0,null,null,47,"mat-tab-group",[["class","metadata-menu mat-tab-group"]],[[2,"mat-tab-group-dynamic-height",null],[2,"mat-tab-group-inverted-header",null]],[[null,"selectedTabChange"]],function(e,t,n){var r=!0;return"selectedTabChange"===t&&(r=!1!==e.component.tabChange()&&r),r},pn,nh)),al["\u0275did"](6,3325952,null,1,Xf,[al.ElementRef,al.ChangeDetectorRef],null,{selectedTabChange:"selectedTabChange"}),al["\u0275qud"](603979776,5,{_tabs:1}),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](9,16777216,null,null,9,"mat-tab",[["class","submenu"],["label","DATAVERSES"]],null,null,null,yn,oh)),al["\u0275did"](10,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,6,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](13,0,null,0,4,"div",[["class","dataverses"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](15,0,null,null,1,"awc-dataverses",[["class","dataverses"]],null,null,null,Xe,af)),al["\u0275did"](16,12697600,[[1,4],["dataverses",4]],0,tf,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](20,16777216,null,null,9,"mat-tab",[["label","DATASETS"]],null,null,null,yn,oh)),al["\u0275did"](21,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,7,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](24,0,null,0,4,"div",[["class","datasets"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](26,0,null,null,1,"awc-datasets",[["class","datasets"]],null,null,null,Et,yf)),al["\u0275did"](27,114688,[[2,4],["datasets",4]],0,ff,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["  \n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](31,16777216,null,null,9,"mat-tab",[["label","DATATYPES"]],null,null,null,yn,oh)),al["\u0275did"](32,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,8,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](35,0,null,0,4,"div",[["class","datatypes"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](37,0,null,null,1,"awc-datatypes",[["class","datatypes"]],null,null,null,Lt,Tf)),al["\u0275did"](38,114688,[[3,4],["datatypes",4]],0,Cf,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](42,16777216,null,null,9,"mat-tab",[["class","indexes"],["label","INDEXES"]],null,null,null,yn,oh)),al["\u0275did"](43,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,9,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](46,0,null,0,4,"div",[["class","indexes"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](48,0,null,null,1,"awc-indexes",[["class","indexes"]],null,null,null,nn,Ff)),al["\u0275did"](49,114688,[[4,4],["indexes",4]],0,Pf,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n\n"]))],function(e,t){var n=t.component;e(t,10,0,"DATAVERSES"),e(t,16,0,n.message),e(t,21,0,"DATASETS"),e(t,27,0,n.message),e(t,32,0,"DATATYPES"),e(t,38,0,n.message),e(t,43,0,"INDEXES"),e(t,49,0,n.message)},function(e,t){e(t,5,0,al["\u0275nov"](t,6).dynamicHeight,"below"===al["\u0275nov"](t,6).headerPosition)})}function qi(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,22,"div",[["class","content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](3,0,null,null,19,"mat-tab-group",[["class","menu mat-tab-group"]],[[2,"mat-tab-group-dynamic-height",null],[2,"mat-tab-group-inverted-header",null]],null,null,pn,nh)),al["\u0275did"](4,3325952,null,1,Xf,[al.ElementRef,al.ChangeDetectorRef],null,null),al["\u0275qud"](603979776,1,{_tabs:1}),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,16777216,null,null,6,"mat-tab",[["label",">_ QUERY"]],null,null,null,yn,oh)),al["\u0275did"](8,770048,[[1,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,2,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](11,0,null,0,1,"awc-query-container",[],null,null,null,Hi,nm)),al["\u0275did"](12,49152,null,0,tm,[Yp.m],null,null),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](15,16777216,null,null,6,"mat-tab",[["label","METADATA"]],null,null,null,yn,oh)),al["\u0275did"](16,770048,[[1,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,3,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](19,0,null,0,1,"awc-metadata-container",[],null,null,null,Wi,im)),al["\u0275did"](20,49152,null,0,rm,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){e(t,8,0,">_ QUERY"),e(t,16,0,"METADATA")},function(e,t){e(t,3,0,al["\u0275nov"](t,4).dynamicHeight,"below"===al["\u0275nov"](t,4).headerPosition)})}function Ui(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,1,"awc-bar",[],null,null,null,ln,Wf)),al["\u0275did"](2,49152,null,0,Hf,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](4,0,null,null,1,"awc-tab",[],null,null,null,qi,lm)),al["\u0275did"](5,49152,null,0,om,[Yp.m],null,null),(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function Gi(e){switch(e.length){case 0:return new Rs.NoopAnimationPlayer;case 1:return e[0];default:return new Rs["\u0275AnimationGroupPlayer"](e)}}function Ki(e,t,n,r,i,o){void 0===i&&(i={}),void 0===o&&(o={});var l=[],a=[],s=-1,u=null;if(r.forEach(function(e){var n=e.offset,r=n==s,c=r&&u||{};Object.keys(e).forEach(function(n){var r=n,a=e[n];if("offset"!==n)switch(r=t.normalizePropertyName(r,l),a){case Rs["\u0275PRE_STYLE"]:a=i[n];break;case Rs.AUTO_STYLE:a=o[n];break;default:a=t.normalizeStyleValue(n,r,a,l)}c[r]=a}),r||a.push(c),u=c,s=n}),l.length)throw new Error("Unable to animate due to the following errors:\n - "+l.join("\n - "));return a}function $i(e,t,n,r){switch(t){case"start":e.onStart(function(){return r(n&&Zi(n,"start",e.totalTime))});break;case"done":e.onDone(function(){return r(n&&Zi(n,"done",e.totalTime))});break;case"destroy":e.onDestroy(function(){return r(n&&Zi(n,"destroy",e.totalTime))})}}function Zi(e,t,n){var r=Qi(e.element,e.triggerName,e.fromState,e.toState,t||e.phaseName,void 0==n?e.totalTime:n),i=e._data;return null!=i&&(r._data=i),r}function Qi(e,t,n,r,i,o){return void 0===i&&(i=""),void 0===o&&(o=0),{element:e,triggerName:t,fromState:n,toState:r,phaseName:i,totalTime:o}}function Yi(e,t,n){var r;return e instanceof Map?(r=e.get(t))||e.set(t,r=n):(r=e[t])||(r=e[t]=n),r}function Xi(e){var t=e.indexOf(":");return[e.substring(1,t),e.substr(t+1)]}function Ji(e){mm||(mm=eo()||{},gm=!!mm.style&&"WebkitAppearance"in mm.style);var t=!0;return mm.style&&"ebkit"!=e.substring(1,6)&&!(t=e in mm.style)&&gm&&(t="Webkit"+e.charAt(0).toUpperCase()+e.substr(1)in mm.style),t}function eo(){return"undefined"!=typeof document?document.body:null}function to(e){if("number"==typeof e)return e;var t=e.match(/^(-?[\.\d]+)(m?s)/);return!t||t.length<2?0:no(parseFloat(t[1]),t[2])}function no(e,t){switch(t){case"s":return e*xm;default:return e}}function ro(e,t,n){return e.hasOwnProperty("duration")?e:function(e,t,n){var r,i=0,o="";if("string"==typeof e){var l=e.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===l)return t.push('The provided timing value "'+e+'" is invalid.'),{duration:0,delay:0,easing:""};r=no(parseFloat(l[1]),l[2]);var a=l[3];null!=a&&(i=no(Math.floor(parseFloat(a)),l[4]));var s=l[5];s&&(o=s)}else r=e;if(!n){var u=!1,c=t.length;r<0&&(t.push("Duration values below 0 are not allowed for this animation step."),u=!0),i<0&&(t.push("Delay values below 0 are not allowed for this animation step."),u=!0),u&&t.splice(c,0,'The provided timing value "'+e+'" is invalid.')}return{duration:r,delay:i,easing:o}}(e,t,n)}function io(e,t){return void 0===t&&(t={}),Object.keys(e).forEach(function(n){t[n]=e[n]}),t}function oo(e,t,n){if(void 0===n&&(n={}),t)for(var r in e)n[r]=e[r];else io(e,n);return n}function lo(e,t){e.style&&Object.keys(t).forEach(function(n){var r=fo(n);e.style[r]=t[n]})}function ao(e,t){e.style&&Object.keys(t).forEach(function(t){var n=fo(t);e.style[n]=""})}function so(e){return Array.isArray(e)?1==e.length?e[0]:Object(Rs.sequence)(e):e}function uo(e){var t=[];if("string"==typeof e){for(var n=e.toString(),r=void 0;r=Om.exec(n);)t.push(r[1]);Om.lastIndex=0}return t}function co(e,t,n){var r=e.toString(),i=r.replace(Om,function(e,r){var i=t[r];return t.hasOwnProperty(r)||(n.push("Please provide a value for the animation param "+r),i=""),i.toString()});return i==r?e:i}function po(e){for(var t=[],n=e.next();!n.done;)t.push(n.value),n=e.next();return t}function fo(e){return e.replace(Tm,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e[1].toUpperCase()})}function ho(e,t,n){switch(t.type){case 7:return e.visitTrigger(t,n);case 0:return e.visitState(t,n);case 1:return e.visitTransition(t,n);case 2:return e.visitSequence(t,n);case 3:return e.visitGroup(t,n);case 4:return e.visitAnimate(t,n);case 5:return e.visitKeyframes(t,n);case 6:return e.visitStyle(t,n);case 8:return e.visitReference(t,n);case 9:return e.visitAnimateChild(t,n);case 10:return e.visitAnimateRef(t,n);case 11:return e.visitQuery(t,n);case 12:return e.visitStagger(t,n);default:throw new Error("Unable to resolve animation metadata node #"+t.type)}}function mo(e,t){var n=Dm.has(e)||Im.has(e),r=Dm.has(t)||Im.has(t);return function(i,o){var l=e==km||e==i,a=t==km||t==o;return!l&&n&&"boolean"==typeof i&&(l=i?Dm.has(e):Im.has(e)),!a&&r&&"boolean"==typeof o&&(a=o?Dm.has(t):Im.has(t)),l&&a}}function go(e,t,n){return new Mm(e).build(t,n)}function yo(e){return!Array.isArray(e)&&"object"==typeof e}function vo(e){return e?(e=io(e)).params&&(e.params=function(e){return e?io(e):null}(e.params)):e={},e}function bo(e,t,n){return{duration:e,delay:t,easing:n}}function _o(e,t,n,r,i,o,l,a){return void 0===l&&(l=null),void 0===a&&(a=!1),{type:1,element:e,keyframes:t,preStyleProps:n,postStyleProps:r,duration:i,delay:o,totalTime:i+o,easing:l,subTimeline:a}}function wo(e,t,n,r,i,o,l,a,s,u){return void 0===o&&(o={}),void 0===l&&(l={}),void 0===u&&(u=[]),(new Fm).buildKeyframes(e,t,n,r,i,o,l,a,s,u)}function xo(e,t){void 0===t&&(t=3);var n=Math.pow(10,t-1);return Math.round(e*n)/n}function Co(e,t,n,r,i,o,l,a,s,u,c,d){return{type:0,element:e,triggerName:t,isRemovalTransition:i,fromState:n,fromStyles:o,toState:r,toStyles:l,timelines:a,queriedElements:s,preStyleProps:u,postStyleProps:c,errors:d}}function Eo(e,t,n){e.hasOwnProperty(t)?e.hasOwnProperty(n)||(e[n]=e[t]):e.hasOwnProperty(n)&&(e[t]=e[n])}function So(e){return e&&1===e.nodeType}function Oo(e,t){var n=e.style.display;return e.style.display=null!=t?t:"none",n}function To(e,t,n,r,i){var o=[];n.forEach(function(e){return o.push(Oo(e))});var l=[];r.forEach(function(n,r){var o={};n.forEach(function(e){var n=o[e]=t.computeStyle(r,e,i);n&&0!=n.length||(r[ng]=tg,l.push(r))}),e.set(r,o)});var a=0;return n.forEach(function(e){return Oo(e,o[a++])}),l}function ko(e,t){function n(e){if(!e)return i;var t=l.get(e);if(t)return t;var a=e.parentNode;return t=r.has(a)?a:o.has(a)?i:n(a),l.set(e,t),t}var r=new Map;if(e.forEach(function(e){return r.set(e,[])}),0==t.length)return r;var i=1,o=new Set(t),l=new Map;return t.forEach(function(e){var t=n(e);t!==i&&r.get(t).push(e)}),r}function Do(e,t){if(e.classList)e.classList.add(t);else{var n=e[ug];n||(n=e[ug]={}),n[t]=!0}}function Io(e,t){if(e.classList)e.classList.remove(t);else{var n=e[ug];n&&delete n[t]}}function Ro(e,t){for(var n=0;n<e.length;n++){var r=e[n];r instanceof Rs["\u0275AnimationGroupPlayer"]?Ro(r.players,t):t.push(r)}}function Mo(e,t,n){var r=n.get(e);if(!r)return!1;var i=t.get(e);return i?r.forEach(function(e){return i.add(e)}):t.set(e,r),n.delete(e),!0}function Po(e,t){return window.getComputedStyle(e)[t]}function No(e,t,n,r,i){return e.setProperty(t,"@@"+n+":"+r,i)}function Ao(){return"undefined"!=typeof Element&&"function"==typeof Element.prototype.animate?new pg:new _m}function Lo(){return new Wm}function Fo(e,t,n){return new gg(e,t,n)}function jo(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),Object(nu.a)(e,t,n)(this)}function Vo(){return"undefined"!=typeof window?window.indexedDB:self.indexedDB}function zo(e){return function(){return e.scrollStrategies.reposition()}}function Bo(e){return function(){return e.scrollStrategies.reposition()}}function Ho(e){return function(){return e.scrollStrategies.reposition()}}function Wo(e){return e||new Ng}function qo(e){return e||new Lg}function Uo(e){var t=(void 0===e?{dispatch:!0}:e).dispatch;return function(e,n){!function(t,n){var r=e.constructor,i=r.hasOwnProperty(ly)?r[ly]:Object.defineProperty(r,ly,{value:[]})[ly];Array.prototype.push.apply(i,n)}(0,[{propertyName:n,dispatch:t}])}}function Go(e){return Object.getPrototypeOf(e)}function Ko(e){var t=function(e){var t=Go(e).constructor.name,n=ay(e).map(function(n){var r=n.propertyName,i=n.dispatch,o="function"==typeof e[r]?e[r]():e[r];if(!1===i)return function(){return function(e){return e.lift(new Wg)}(this)}.call(o);var l=function(){return function(e){return e.lift(new Ug)}(this)}.call(o);return iu.a.call(l,function(n){return{effect:e[r],notification:n,propertyName:r,sourceName:t,sourceInstance:e}})});return Ll.a.apply(void 0,n)}(e);return function(t){var n=Go(e);return sy in n&&"function"==typeof n[sy]}()?e.ngrxOnRunEffects(t):t}function $o(e){var t=e.propertyName;return'"'+e.sourceName+"."+t+("function"==typeof e.sourceInstance[t]?"()":"")+'"'}function Zo(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e}function Qo(){return console}function Yo(e,t){switch(void 0===e&&(e=yy),t.type){case Ad:return Object.assign({},e,{loading:!0});case Ld:return Object.assign({},e,{loaded:!0,loading:!1,dataverses:t.payload});case Fd:return Object.assign({},e,{createDataverse:[],createDataverseName:t.payload,createDataverseError:[],createDataverseSuccess:!1,createDataverseFailed:!1});case jd:return Object.assign({},e,{createDataverse:t.payload,createDataverseError:[],createDataverseSuccess:!0,createDataverseFailed:!1});case Vd:return Object.assign({},e,{createDataverse:[],createDataverseError:t.payload,createDataverseSuccess:!1,createDataverseFailed:!0});case zd:return Object.assign({},e,{dropDataverse:[],dropDataverseName:t.payload,dropDataverseError:[],dropDataverseSuccess:!1,dropDataverseFailed:!1});case Bd:return Object.assign({},e,{dropDataverse:t.payload,dropDataverseError:[],dropDataverseSuccess:!0,dropDataverseFailed:!1});case Hd:return Object.assign({},e,{dropDataverse:[],dropDataverseError:t.payload,dropDataverseSuccess:!1,dropDataverseFailed:!0});default:return e}}function Xo(e,t){switch(void 0===e&&(e=vy),t.type){case lp:return Object.assign({},e,{guideSelectsDataset:t.payload});case Xd:return Object.assign({},e,{loading:!0});case Jd:return Object.assign({},e,{loaded:!0,loading:!1,datasets:t.payload});case ep:return Object.assign({},e,{createDataset:[],createDatasetError:[],createDatasetSuccess:!1,createDatasetFailed:!1});case tp:return Object.assign({},e,{createDataset:t.payload,createDatasetName:t.payload,createDatasetError:[],createDatasetSuccess:!0,createDatasetFailed:!1});case np:return Object.assign({},e,{createDataset:[],createDatasetError:t.payload,createDatasetSuccess:!1,createDatasetFailed:!0});case rp:return Object.assign({},e,{dropDataset:[],dropDatasetError:[],dropDatasetName:t.payload,dropDatasetSuccess:!1,dropDatasetFailed:!1});case ip:return Object.assign({},e,{dropDataset:t.payload,dropDatasetError:[],dropDatasetSuccess:!0,dropDatasetFailed:!1});case op:return Object.assign({},e,{dropDataset:[],dropDatasetError:t.payload,dropDatasetSuccess:!1,dropDatasetFailed:!0});default:return e}}function Jo(e,t){switch(void 0===e&&(e=by),t.type){case yp:return Object.assign({},e,{loading:!0});case vp:return Object.assign({},e,{loaded:!0,loading:!1,datatypes:t.payload});case bp:return Object.assign({},e,{createDatatype:[],createDatatypeName:t.payload,createDatatypeError:[],createDatatypeSuccess:!1,createDatatypeFailed:!1});case _p:return Object.assign({},e,{createDatatype:t.payload,createDatatypeError:[],createDatatypeSuccess:!0,createDatatypeFailed:!1});case wp:return Object.assign({},e,{createDatatype:[],createDatatypeError:t.payload,createDatatypeSuccess:!1,createDatatypeFailed:!0});case xp:return Object.assign({},e,{dropDatatype:[],dropDatatypeName:t.payload,dropDatatypeError:[],dropDatatypeSuccess:!1,dropDatatypeFailed:!1});case Cp:return Object.assign({},e,{dropDatatype:t.payload,dropDatatypeError:[],dropDatatypeSuccess:!0,dropDatatypeFailed:!1});case Ep:return Object.assign({},e,{dropDatatype:[],dropDatatypeError:t.payload,dropDatatypeSuccess:!1,dropDatatypeFailed:!0});default:return e}}function el(e,t){switch(void 0===e&&(e=_y),t.type){case Np:return Object.assign({},e,{loading:!0});case Ap:return Object.assign({},e,{loaded:!0,loading:!1,indexes:t.payload});case Lp:return Object.assign({},e,{createIndex:[],createIndexName:t.payload,createIndexError:[],createIndexSuccess:!1,createIndexFailed:!1});case Fp:return Object.assign({},e,{createIndex:[],createIndexError:[],createIndexSuccess:!0,createIndexFailed:!1});case Fp:return Object.assign({},e,{createIndex:t.payload,createIndexError:[],createIndexSuccess:!1,createIndexFailed:!0});case jp:return Object.assign({},e,{dropIndex:[],dropIndexError:[],dropIndexName:t.payload,dropIndexSuccess:!1,dropIndexFailed:!1});case Vp:return Object.assign({},e,{dropIndex:t.payload,dropIndexError:[],dropIndexSuccess:!0,dropIndexFailed:!1});case zp:return Object.assign({},e,{dropIndex:[],dropIndexError:t.payload,dropIndexSuccess:!1,dropIndexFailed:!0});default:return e}}function tl(e,t){switch(void 0===e&&(e=wy),t.type){case Cd:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryString:t.payload,sqlQueryResult:[],sqlQueryError:[]});case Ed:return Object.assign({},e,{loading:!1,loaded:!0,success:!0,sqlQueryResult:t.payload,sqlQueryError:[]});case Sd:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryResult:[],sqlQueryError:t.payload});default:return e}}function nl(e,t){switch(void 0===e&&(e=xy),t.type){case Od:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryMetadataString:t.payload,sqlQueryMetadataResult:[],sqlQueryMetadataError:[]});case Td:return Object.assign({},e,{loading:!1,loaded:!0,success:!0,sqlQueryMetadataResult:t.payload,sqlQueryMetadataError:[]});case kd:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryMetadataResult:[],sqlQueryMetadataError:t.payload});default:return e}}function rl(e,t){switch(void 0===e&&(e=Cy),t.type){case Yh:return Object.assign({},e,{tree:[],loading:!0,loaded:!1});case Xh:return Object.assign({},e,{tree:e.tree.concat([t.payload]),loading:!1,loaded:!0});default:return e}}function il(e){return j(e)(this)}Object.defineProperty(t,"__esModule",{value:!0}),n("TU+8"),n("rgUS");var ol,ll,al=n("LMZF"),sl=function(){},ul=function(e){this.appCoreService=e,this.title="Asterix DB Web Console"},cl=n("Un6q"),dl="undefined"!=typeof Intl&&Intl.v8BreakIterator,pl=function(){return function(){this.isBrowser="object"==typeof document&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!(!window.chrome&&!dl)&&!!CSS&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}}(),fl=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"],hl=function(){},ml=n("TO51"),gl=n("AP4T"),yl=n("Oryw"),vl=yl.a.of,bl=n("6Xbx"),_l=n("8ofh"),wl=n("B1iP"),xl=n("NePw"),Cl=n("qLnt"),El=Object.prototype.toString,Sl=function(e){function t(t,n,r,i){e.call(this),this.sourceObj=t,this.eventName=n,this.selector=r,this.options=i}return Object(bl.__extends)(t,e),t.create=function(e,n,r,i){return Object(wl.a)(r)&&(i=r,r=void 0),new t(e,n,i,r)},t.setupSubscription=function(e,n,r,i,o){var l;if(e&&"[object NodeList]"===El.call(e)||e&&"[object HTMLCollection]"===El.call(e))for(var a=0,s=e.length;a<s;a++)t.setupSubscription(e[a],n,r,i,o);else if(e&&"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener){var u=e;e.addEventListener(n,r,o),l=function(){return u.removeEventListener(n,r)}}else if(e&&"function"==typeof e.on&&"function"==typeof e.off){var c=e;e.on(n,r),l=function(){return c.off(n,r)}}else{if(!e||"function"!=typeof e.addListener||"function"!=typeof e.removeListener)throw new TypeError("Invalid event target");var d=e;e.addListener(n,r),l=function(){return d.removeListener(n,r)}}i.add(new Cl.a(l))},t.prototype._subscribe=function(e){var n=this.selector;t.setupSubscription(this.sourceObj,this.eventName,n?function(){for(var t=[],r=0;r<arguments.length;r++)t[r-0]=arguments[r];var i=Object(_l.a)(n).apply(void 0,t);i===xl.a?e.error(xl.a.e):e.next(i)}:function(t){return e.next(t)},e,this.options)},t}(gl.a).create,Ol=n("GTlS"),Tl=new(n("wclm").a)(Ol.a),kl=n("lI6h"),Dl=n("qgI0"),Il=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new Rl(e,this.durationSelector))},e}(),Rl=function(e){function t(t,n){e.call(this,t),this.durationSelector=n,this.hasValue=!1}return Object(bl.__extends)(t,e),t.prototype._next=function(e){if(this.value=e,this.hasValue=!0,!this.throttled){var t=Object(_l.a)(this.durationSelector)(e);if(t===xl.a)this.destination.error(xl.a.e);else{var n=Object(Dl.a)(this,t);n.closed?this.clearThrottle():this.add(this.throttled=n)}}},t.prototype.clearThrottle=function(){var e=this.value,t=this.hasValue,n=this.throttled;n&&(this.remove(n),this.throttled=null,n.unsubscribe()),t&&(this.value=null,this.hasValue=!1,this.destination.next(e))},t.prototype.notifyNext=function(e,t,n,r){this.clearThrottle()},t.prototype.notifyComplete=function(){this.clearThrottle()},t}(kl.a),Ml=n("1j/l"),Pl=n("3iOE"),Nl=function(e){function t(t,n,r){void 0===t&&(t=0),e.call(this),this.period=-1,this.dueTime=0,function(e){return!Object(Ml.a)(e)&&e-parseFloat(e)+1>=0}(n)?this.period=Number(n)<1?1:Number(n):Object(Pl.a)(n)&&(r=n),Object(Pl.a)(r)||(r=Tl),this.scheduler=r,this.dueTime=function(e){return e instanceof Date&&!isNaN(+e)}(t)?+t-this.scheduler.now():t}return Object(bl.__extends)(t,e),t.create=function(e,n,r){return void 0===e&&(e=0),new t(e,n,r)},t.dispatch=function(e){var t=e.index,n=e.period,r=e.subscriber;if(r.next(t),!r.closed){if(-1===n)return r.complete();e.index=t+1,this.schedule(e,n)}},t.prototype._subscribe=function(e){return this.scheduler.schedule(t.dispatch,this.dueTime,{index:0,period:this.period,subscriber:e})},t}(gl.a).create,Al=n("LaOa"),Ll=n("2kLc"),Fl=function(){function e(e,t){this._ngZone=e,this._platform=t,this._scrolled=new ml.Subject,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map}return e.prototype.register=function(e){var t=this,n=e.elementScrolled().subscribe(function(){return t._scrolled.next(e)});this.scrollContainers.set(e,n)},e.prototype.deregister=function(e){var t=this.scrollContainers.get(e);t&&(t.unsubscribe(),this.scrollContainers.delete(e))},e.prototype.scrolled=function(e){var t=this;return void 0===e&&(e=20),this._platform.isBrowser?gl.a.create(function(n){t._globalSubscription||t._addGlobalListener();var r=e>0?t._scrolled.pipe(o(e)).subscribe(n):t._scrolled.subscribe(n);return t._scrolledCount++,function(){r.unsubscribe(),t._scrolledCount--,t._globalSubscription&&!t._scrolledCount&&(t._globalSubscription.unsubscribe(),t._globalSubscription=null)}}):vl()},e.prototype.ancestorScrolled=function(e,t){var n=this.getAncestorScrollContainers(e);return this.scrolled(t).pipe(Object(Al.a)(function(e){return!e||n.indexOf(e)>-1}))},e.prototype.getAncestorScrollContainers=function(e){var t=this,n=[];return this.scrollContainers.forEach(function(r,i){t._scrollableContainsElement(i,e)&&n.push(i)}),n},e.prototype._scrollableContainsElement=function(e,t){var n=t.nativeElement,r=e.getElementRef().nativeElement;do{if(n==r)return!0}while(n=n.parentElement);return!1},e.prototype._addGlobalListener=function(){var e=this;this._globalSubscription=this._ngZone.runOutsideAngular(function(){return Sl(window.document,"scroll").subscribe(function(){return e._scrolled.next()})})},e}(),jl=function(){function e(e,t){var n=this;this._change=e.isBrowser?t.runOutsideAngular(function(){return Object(Ll.a)(Sl(window,"resize"),Sl(window,"orientationchange"))}):vl(),this._invalidateCache=this.change().subscribe(function(){return n._updateViewportSize()})}return e.prototype.ngOnDestroy=function(){this._invalidateCache.unsubscribe()},e.prototype.getViewportSize=function(){return this._viewportSize||this._updateViewportSize(),{width:this._viewportSize.width,height:this._viewportSize.height}},e.prototype.getViewportRect=function(){var e=this.getViewportScrollPosition(),t=this.getViewportSize(),n=t.width,r=t.height;return{top:e.top,left:e.left,bottom:e.top+r,right:e.left+n,height:r,width:n}},e.prototype.getViewportScrollPosition=function(){var e=document.documentElement.getBoundingClientRect();return{top:-e.top||document.body.scrollTop||window.scrollY||document.documentElement.scrollTop||0,left:-e.left||document.body.scrollLeft||window.scrollX||document.documentElement.scrollLeft||0}},e.prototype.change=function(e){return void 0===e&&(e=20),e>0?this._change.pipe(o(e)):this._change},e.prototype._updateViewportSize=function(){this._viewportSize={width:window.innerWidth,height:window.innerHeight}},e}(),Vl=function(){},zl=new al.InjectionToken("cdk-dir-doc"),Bl=function(){return function(e){this.value="ltr",this.change=new al.EventEmitter,e&&(this.value=(e.body?e.body.dir:null)||(e.documentElement?e.documentElement.dir:null)||"ltr")}}(),Hl=function(){},Wl=function(){function e(){}return e.prototype.attach=function(e){return null==e&&function(){throw Error("Attempting to attach a portal to a null PortalOutlet")}(),e.hasAttached()&&s(),this._attachedHost=e,e.attach(this)},e.prototype.detach=function(){var e=this._attachedHost;null==e?function(){throw Error("Attempting to detach a portal that is not attached to a host")}():(this._attachedHost=null,e.detach())},Object.defineProperty(e.prototype,"isAttached",{get:function(){return null!=this._attachedHost},enumerable:!0,configurable:!0}),e.prototype.setAttachedHost=function(e){this._attachedHost=e},e}(),ql=function(e){function t(t,n,r){var i=e.call(this)||this;return i.component=t,i.viewContainerRef=n,i.injector=r,i}return Object(bl.__extends)(t,e),t}(Wl),Ul=function(e){function t(t,n,r){var i=e.call(this)||this;return i.templateRef=t,i.viewContainerRef=n,r&&(i.context=r),i}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"origin",{get:function(){return this.templateRef.elementRef},enumerable:!0,configurable:!0}),t.prototype.attach=function(t,n){return void 0===n&&(n=this.context),this.context=n,e.prototype.attach.call(this,t)},t.prototype.detach=function(){return this.context=void 0,e.prototype.detach.call(this)},t}(Wl),Gl=function(){function e(){this._isDisposed=!1}return e.prototype.hasAttached=function(){return!!this._attachedPortal},e.prototype.attach=function(e){return e||function(){throw Error("Must provide a portal to attach")}(),this.hasAttached()&&s(),this._isDisposed&&function(){throw Error("This PortalOutlet has already been disposed")}(),e instanceof ql?(this._attachedPortal=e,this.attachComponentPortal(e)):e instanceof Ul?(this._attachedPortal=e,this.attachTemplatePortal(e)):void function(){throw Error("Attempting to attach an unknown Portal type. BasePortalOutlet accepts either a ComponentPortal or a TemplatePortal.")}()},e.prototype.detach=function(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()},e.prototype.dispose=function(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0},e.prototype.setDisposeFn=function(e){this._disposeFn=e},e.prototype._invokeDisposeFn=function(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)},e}(),Kl=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._hostDomElement=t,o._componentFactoryResolver=n,o._appRef=r,o._defaultInjector=i,o}return Object(bl.__extends)(t,e),t.prototype.attachComponentPortal=function(e){var t,n=this,r=this._componentFactoryResolver.resolveComponentFactory(e.component);return e.viewContainerRef?(t=e.viewContainerRef.createComponent(r,e.viewContainerRef.length,e.injector||e.viewContainerRef.parentInjector),this.setDisposeFn(function(){return t.destroy()})):(t=r.create(e.injector||this._defaultInjector),this._appRef.attachView(t.hostView),this.setDisposeFn(function(){n._appRef.detachView(t.hostView),t.destroy()})),this._hostDomElement.appendChild(this._getComponentRootNode(t)),t},t.prototype.attachTemplatePortal=function(e){var t=this,n=e.viewContainerRef,r=n.createEmbeddedView(e.templateRef,e.context);return r.detectChanges(),r.rootNodes.forEach(function(e){return t._hostDomElement.appendChild(e)}),this.setDisposeFn(function(){var e=n.indexOf(r);-1!==e&&n.remove(e)}),r},t.prototype.dispose=function(){e.prototype.dispose.call(this),null!=this._hostDomElement.parentNode&&this._hostDomElement.parentNode.removeChild(this._hostDomElement)},t.prototype._getComponentRootNode=function(e){return e.hostView.rootNodes[0]},t}(Gl),$l=function(e){function t(t,n){var r=e.call(this)||this;return r._componentFactoryResolver=t,r._viewContainerRef=n,r._isInitialized=!1,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"_deprecatedPortal",{get:function(){return this.portal},set:function(e){this.portal=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"_deprecatedPortalHost",{get:function(){return this.portal},set:function(e){this.portal=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"portal",{get:function(){return this._attachedPortal},set:function(t){(!this.hasAttached()||t||this._isInitialized)&&(this.hasAttached()&&e.prototype.detach.call(this),t&&e.prototype.attach.call(this,t),this._attachedPortal=t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){this._isInitialized=!0},t.prototype.ngOnDestroy=function(){e.prototype.dispose.call(this),this._attachedPortal=null},t.prototype.attachComponentPortal=function(t){t.setAttachedHost(this);var n=null!=t.viewContainerRef?t.viewContainerRef:this._viewContainerRef,r=this._componentFactoryResolver.resolveComponentFactory(t.component),i=n.createComponent(r,n.length,t.injector||n.parentInjector);return e.prototype.setDisposeFn.call(this,function(){return i.destroy()}),this._attachedPortal=t,i},t.prototype.attachTemplatePortal=function(t){var n=this;t.setAttachedHost(this);var r=this._viewContainerRef.createEmbeddedView(t.templateRef,t.context);return e.prototype.setDisposeFn.call(this,function(){return n._viewContainerRef.clear()}),this._attachedPortal=t,r},t}(Gl),Zl=function(){},Ql=function(){function e(e,t){this._parentInjector=e,this._customTokens=t}return e.prototype.get=function(e,t){var n=this._customTokens.get(e);return void 0!==n?n:this._parentInjector.get(e,t)},e}(),Yl=n("E9/g"),Xl=function(e){function t(){var t=e.call(this,"argument out of range");this.name=t.name="ArgumentOutOfRangeError",this.stack=t.stack,this.message=t.message}return Object(bl.__extends)(t,e),t}(Error),Jl=n("Ecq+"),ea=function(){function e(e){if(this.total=e,this.total<0)throw new Xl}return e.prototype.call=function(e,t){return t.subscribe(new ta(e,this.total))},e}(),ta=function(e){function t(t,n){e.call(this,t),this.total=n,this.count=0}return Object(bl.__extends)(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(Yl.a),na=function(){function e(){}return e.prototype.enable=function(){},e.prototype.disable=function(){},e.prototype.attach=function(){},e}(),ra=function(){return function(e){var t=this;this.scrollStrategy=new na,this.panelClass="",this.hasBackdrop=!1,this.backdropClass="cdk-overlay-dark-backdrop",this.direction="ltr",e&&Object.keys(e).forEach(function(n){return t[n]=e[n]})}}(),ia=function(){function e(e,t){this._scrollDispatcher=e,this._ngZone=t,this._scrollSubscription=null}return e.prototype.attach=function(e){if(this._overlayRef)throw f();this._overlayRef=e},e.prototype.enable=function(){var e=this;this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(0).subscribe(function(){e._ngZone.run(function(){e.disable(),e._overlayRef.hasAttached()&&e._overlayRef.detach()})}))},e.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},e}(),oa=function(){function e(e){this._viewportRuler=e,this._previousHTMLStyles={top:"",left:""},this._isEnabled=!1}return e.prototype.attach=function(){},e.prototype.enable=function(){if(this._canBeEnabled()){var e=document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=-this._previousScrollPosition.left+"px",e.style.top=-this._previousScrollPosition.top+"px",e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}},e.prototype.disable=function(){if(this._isEnabled){var e=document.documentElement,t=document.body,n=e.style.scrollBehavior||"",r=t.style.scrollBehavior||"";this._isEnabled=!1,e.style.left=this._previousHTMLStyles.left,e.style.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),e.style.scrollBehavior=t.style.scrollBehavior="auto",window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),e.style.scrollBehavior=n,t.style.scrollBehavior=r}},e.prototype._canBeEnabled=function(){if(document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;var e=document.body,t=this._viewportRuler.getViewportSize();return e.scrollHeight>t.height||e.scrollWidth>t.width},e}(),la=function(){function e(e,t,n,r){this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this._config=r,this._scrollSubscription=null}return e.prototype.attach=function(e){if(this._overlayRef)throw f();this._overlayRef=e},e.prototype.enable=function(){var e=this;this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(this._config?this._config.scrollThrottle:0).subscribe(function(){if(e._overlayRef.updatePosition(),e._config&&e._config.autoClose){var t=e._overlayRef.overlayElement.getBoundingClientRect(),n=e._viewportRuler.getViewportSize(),r=n.width,i=n.height;h(t,[{width:r,height:i,bottom:i,right:r,top:0,left:0}])&&(e.disable(),e._ngZone.run(function(){return e._overlayRef.detach()}))}}))},e.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},e}(),aa=function(){return function(e,t,n){var r=this;this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this.noop=function(){return new na},this.close=function(){return new ia(r._scrollDispatcher,r._ngZone)},this.block=function(){return new oa(r._viewportRuler)},this.reposition=function(e){return new la(r._scrollDispatcher,r._viewportRuler,r._ngZone,e)}}}(),sa=function(){function e(e,t,n,r,i){this._portalOutlet=e,this._pane=t,this._config=n,this._ngZone=r,this._keyboardDispatcher=i,this._backdropElement=null,this._backdropClick=new ml.Subject,this._attachments=new ml.Subject,this._detachments=new ml.Subject,this._keydownEvents=new ml.Subject,n.scrollStrategy&&n.scrollStrategy.attach(this)}return Object.defineProperty(e.prototype,"overlayElement",{get:function(){return this._pane},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){var t=this,n=this._portalOutlet.attach(e);return this._config.positionStrategy&&this._config.positionStrategy.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._config.scrollStrategy&&this._config.scrollStrategy.enable(),this._ngZone.onStable.asObservable().pipe(u(1)).subscribe(function(){t.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&(Array.isArray(this._config.panelClass)?this._config.panelClass.forEach(function(e){return t._pane.classList.add(e)}):this._pane.classList.add(this._config.panelClass)),this._attachments.next(),this._keyboardDispatcher.add(this),n},e.prototype.detach=function(){if(this.hasAttached()){this.detachBackdrop(),this._togglePointerEvents(!1),this._config.positionStrategy&&this._config.positionStrategy.detach&&this._config.positionStrategy.detach(),this._config.scrollStrategy&&this._config.scrollStrategy.disable();var e=this._portalOutlet.detach();return this._detachments.next(),this._keyboardDispatcher.remove(this),e}},e.prototype.dispose=function(){var e=this.hasAttached();this._config.positionStrategy&&this._config.positionStrategy.dispose(),this._config.scrollStrategy&&this._config.scrollStrategy.disable(),this.detachBackdrop(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),e&&this._detachments.next(),this._detachments.complete()},e.prototype.hasAttached=function(){return this._portalOutlet.hasAttached()},e.prototype.backdropClick=function(){return this._backdropClick.asObservable()},e.prototype.attachments=function(){return this._attachments.asObservable()},e.prototype.detachments=function(){return this._detachments.asObservable()},e.prototype.keydownEvents=function(){return this._keydownEvents.asObservable()},e.prototype.getConfig=function(){return this._config},e.prototype.updatePosition=function(){this._config.positionStrategy&&this._config.positionStrategy.apply()},e.prototype.updateSize=function(e){this._config=Object(bl.__assign)({},this._config,e),this._updateElementSize()},e.prototype.setDirection=function(e){this._config=Object(bl.__assign)({},this._config,{direction:e}),this._updateElementDirection()},e.prototype._updateElementDirection=function(){this._pane.setAttribute("dir",this._config.direction)},e.prototype._updateElementSize=function(){(this._config.width||0===this._config.width)&&(this._pane.style.width=g(this._config.width)),(this._config.height||0===this._config.height)&&(this._pane.style.height=g(this._config.height)),(this._config.minWidth||0===this._config.minWidth)&&(this._pane.style.minWidth=g(this._config.minWidth)),(this._config.minHeight||0===this._config.minHeight)&&(this._pane.style.minHeight=g(this._config.minHeight)),(this._config.maxWidth||0===this._config.maxWidth)&&(this._pane.style.maxWidth=g(this._config.maxWidth)),(this._config.maxHeight||0===this._config.maxHeight)&&(this._pane.style.maxHeight=g(this._config.maxHeight))},e.prototype._togglePointerEvents=function(e){this._pane.style.pointerEvents=e?"auto":"none"},e.prototype._attachBackdrop=function(){var e=this;this._backdropElement=document.createElement("div"),this._backdropElement.classList.add("cdk-overlay-backdrop"),this._config.backdropClass&&this._backdropElement.classList.add(this._config.backdropClass),this._pane.parentElement.insertBefore(this._backdropElement,this._pane),this._backdropElement.addEventListener("click",function(){return e._backdropClick.next(null)}),this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){e._backdropElement&&e._backdropElement.classList.add("cdk-overlay-backdrop-showing")})})},e.prototype._updateStackingOrder=function(){this._pane.nextSibling&&this._pane.parentNode.appendChild(this._pane)},e.prototype.detachBackdrop=function(){var e=this,t=this._backdropElement;if(t){var n=function(){t&&t.parentNode&&t.parentNode.removeChild(t),e._backdropElement==t&&(e._backdropElement=null)};t.classList.remove("cdk-overlay-backdrop-showing"),this._config.backdropClass&&t.classList.remove(this._config.backdropClass),t.addEventListener("transitionend",n),t.style.pointerEvents="none",this._ngZone.runOutsideAngular(function(){setTimeout(n,500)})}},e}(),ua=function(){function e(e,t,n,r,i){this._connectedTo=n,this._viewportRuler=r,this._document=i,this._dir="ltr",this._offsetX=0,this._offsetY=0,this.scrollables=[],this._resizeSubscription=Cl.a.EMPTY,this._preferredPositions=[],this._applied=!1,this._positionLocked=!1,this._onPositionChange=new ml.Subject,this._origin=this._connectedTo.nativeElement,this.withFallbackPosition(e,t)}return Object.defineProperty(e.prototype,"_isRtl",{get:function(){return"rtl"===this._dir},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onPositionChange",{get:function(){return this._onPositionChange.asObservable()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"positions",{get:function(){return this._preferredPositions},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){var t=this;this._overlayRef=e,this._pane=e.overlayElement,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(function(){return t.apply()})},e.prototype.dispose=function(){this._applied=!1,this._resizeSubscription.unsubscribe()},e.prototype.detach=function(){this._applied=!1,this._resizeSubscription.unsubscribe()},e.prototype.apply=function(){if(this._applied&&this._positionLocked&&this._lastConnectedPosition)this.recalculateLastPosition();else{this._applied=!0;for(var e,t,n=this._pane,r=this._origin.getBoundingClientRect(),i=n.getBoundingClientRect(),o=this._viewportRuler.getViewportSize(),l=0,a=this._preferredPositions;l<a.length;l++){var s=a[l],u=this._getOriginConnectionPoint(r,s),c=this._getOverlayPoint(u,i,o,s);if(c.fitsInViewport)return this._setElementPosition(n,i,c,s),void(this._lastConnectedPosition=s);(!e||e.visibleArea<c.visibleArea)&&(e=c,t=s)}this._setElementPosition(n,i,e,t)}},e.prototype.recalculateLastPosition=function(){if(this._lastConnectedPosition){var e=this._origin.getBoundingClientRect(),t=this._pane.getBoundingClientRect(),n=this._viewportRuler.getViewportSize(),r=this._lastConnectedPosition||this._preferredPositions[0],i=this._getOriginConnectionPoint(e,r),o=this._getOverlayPoint(i,t,n,r);this._setElementPosition(this._pane,t,o,r)}},e.prototype.withScrollableContainers=function(e){this.scrollables=e},e.prototype.withFallbackPosition=function(e,t,n,r){var i=new function(e,t,n,r){this.offsetX=n,this.offsetY=r,this.originX=e.originX,this.originY=e.originY,this.overlayX=t.overlayX,this.overlayY=t.overlayY}(e,t,n,r);return this._preferredPositions.push(i),this},e.prototype.withDirection=function(e){return this._dir=e,this},e.prototype.withOffsetX=function(e){return this._offsetX=e,this},e.prototype.withOffsetY=function(e){return this._offsetY=e,this},e.prototype.withLockedPosition=function(e){return this._positionLocked=e,this},e.prototype._getStartX=function(e){return this._isRtl?e.right:e.left},e.prototype._getEndX=function(e){return this._isRtl?e.left:e.right},e.prototype._getOriginConnectionPoint=function(e,t){var n,r=this._getStartX(e),i=this._getEndX(e);n="center"==t.originX?r+e.width/2:"start"==t.originX?r:i;var o;return o="center"==t.originY?e.top+e.height/2:"top"==t.originY?e.top:e.bottom,{x:n,y:o}},e.prototype._getOverlayPoint=function(e,t,n,r){var i;i="center"==r.overlayX?-t.width/2:"start"===r.overlayX?this._isRtl?-t.width:0:this._isRtl?0:-t.width;var o;o="center"==r.overlayY?-t.height/2:"top"==r.overlayY?0:-t.height;var l=e.x+i+(void 0===r.offsetX?this._offsetX:r.offsetX),a=e.y+o+(void 0===r.offsetY?this._offsetY:r.offsetY),s=0-a,u=a+t.height-n.height,c=this._subtractOverflows(t.width,0-l,l+t.width-n.width)*this._subtractOverflows(t.height,s,u);return{x:l,y:a,fitsInViewport:t.width*t.height===c,visibleArea:c}},e.prototype._getScrollVisibility=function(e){var t=this._origin.getBoundingClientRect(),n=e.getBoundingClientRect(),r=this.scrollables.map(function(e){return e.getElementRef().nativeElement.getBoundingClientRect()});return{isOriginClipped:m(t,r),isOriginOutsideView:h(t,r),isOverlayClipped:m(n,r),isOverlayOutsideView:h(n,r)}},e.prototype._setElementPosition=function(e,t,n,r){var i,o="bottom"===r.overlayY?"bottom":"top",l="top"===o?n.y:this._document.documentElement.clientHeight-(n.y+t.height),a="left"==(i="rtl"===this._dir?"end"===r.overlayX?"left":"right":"end"===r.overlayX?"right":"left")?n.x:this._document.documentElement.clientWidth-(n.x+t.width);["top","bottom","left","right"].forEach(function(t){return e.style[t]=null}),e.style[o]=l+"px",e.style[i]=a+"px";var s=new function(e,t){this.connectionPair=e,this.scrollableViewProperties=t}(r,this._getScrollVisibility(e));this._onPositionChange.next(s)},e.prototype._subtractOverflows=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce(function(e,t){return e-Math.max(t,0)},e)},e}(),ca=function(){function e(e){this._document=e,this._cssPosition="static",this._topOffset="",this._bottomOffset="",this._leftOffset="",this._rightOffset="",this._alignItems="",this._justifyContent="",this._width="",this._height="",this._wrapper=null}return e.prototype.attach=function(e){this._overlayRef=e},e.prototype.top=function(e){return void 0===e&&(e=""),this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this},e.prototype.left=function(e){return void 0===e&&(e=""),this._rightOffset="",this._leftOffset=e,this._justifyContent="flex-start",this},e.prototype.bottom=function(e){return void 0===e&&(e=""),this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this},e.prototype.right=function(e){return void 0===e&&(e=""),this._leftOffset="",this._rightOffset=e,this._justifyContent="flex-end",this},e.prototype.width=function(e){return void 0===e&&(e=""),this._width=e,"100%"===e&&this.left("0px"),this},e.prototype.height=function(e){return void 0===e&&(e=""),this._height=e,"100%"===e&&this.top("0px"),this},e.prototype.centerHorizontally=function(e){return void 0===e&&(e=""),this.left(e),this._justifyContent="center",this},e.prototype.centerVertically=function(e){return void 0===e&&(e=""),this.top(e),this._alignItems="center",this},e.prototype.apply=function(){var e=this._overlayRef.overlayElement;!this._wrapper&&e.parentNode&&(this._wrapper=this._document.createElement("div"),this._wrapper.classList.add("cdk-global-overlay-wrapper"),e.parentNode.insertBefore(this._wrapper,e),this._wrapper.appendChild(e));var t=e.style,n=e.parentNode.style;t.position=this._cssPosition,t.marginTop=this._topOffset,t.marginLeft=this._leftOffset,t.marginBottom=this._bottomOffset,t.marginRight=this._rightOffset,t.width=this._width,t.height=this._height,n.justifyContent=this._justifyContent,n.alignItems=this._alignItems},e.prototype.dispose=function(){this._wrapper&&this._wrapper.parentNode&&(this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null)},e}(),da=function(){function e(e,t){this._viewportRuler=e,this._document=t}return e.prototype.global=function(){return new ca(this._document)},e.prototype.connectedTo=function(e,t,n){return new ua(t,n,e,this._viewportRuler,this._document)},e}(),pa=function(){function e(e){this._document=e,this._attachedOverlays=[]}return e.prototype.ngOnDestroy=function(){this._unsubscribeFromKeydownEvents()},e.prototype.add=function(e){this._keydownEventSubscription||this._subscribeToKeydownEvents(),this._attachedOverlays.push(e)},e.prototype.remove=function(e){var t=this._attachedOverlays.indexOf(e);t>-1&&this._attachedOverlays.splice(t,1),0===this._attachedOverlays.length&&this._unsubscribeFromKeydownEvents()},e.prototype._subscribeToKeydownEvents=function(){var e=this,t=Sl(this._document.body,"keydown");this._keydownEventSubscription=t.pipe(Object(Al.a)(function(){return!!e._attachedOverlays.length})).subscribe(function(t){e._selectOverlayFromEvent(t)._keydownEvents.next(t)})},e.prototype._unsubscribeFromKeydownEvents=function(){this._keydownEventSubscription&&(this._keydownEventSubscription.unsubscribe(),this._keydownEventSubscription=null)},e.prototype._selectOverlayFromEvent=function(e){return this._attachedOverlays.find(function(t){return t.overlayElement===e.target||t.overlayElement.contains(e.target)})||this._attachedOverlays[this._attachedOverlays.length-1]},e}(),fa=function(){function e(e){this._document=e}return e.prototype.ngOnDestroy=function(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)},e.prototype.getContainerElement=function(){return this._containerElement||this._createContainer(),this._containerElement},e.prototype._createContainer=function(){var e=this._document.createElement("div");e.classList.add("cdk-overlay-container"),this._document.body.appendChild(e),this._containerElement=e},e}(),ha=0,ma=new ra,ga=function(){function e(e,t,n,r,i,o,l,a,s){this.scrollStrategies=e,this._overlayContainer=t,this._componentFactoryResolver=n,this._positionBuilder=r,this._keyboardDispatcher=i,this._appRef=o,this._injector=l,this._ngZone=a,this._document=s}return e.prototype.create=function(e){void 0===e&&(e=ma);var t=this._createPaneElement(),n=this._createPortalOutlet(t);return new sa(n,t,e,this._ngZone,this._keyboardDispatcher)},e.prototype.position=function(){return this._positionBuilder},e.prototype._createPaneElement=function(){var e=this._document.createElement("div");return e.id="cdk-overlay-"+ha++,e.classList.add("cdk-overlay-pane"),this._overlayContainer.getContainerElement().appendChild(e),e},e.prototype._createPortalOutlet=function(e){return new Kl(e,this._componentFactoryResolver,this._appRef,this._injector)},e}(),ya=new al.InjectionToken("cdk-connected-overlay-scroll-strategy"),va=function(){},ba=function(){function e(e,t){this.dueTime=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new _a(e,this.dueTime,this.scheduler))},e}(),_a=function(e){function t(t,n,r){e.call(this,t),this.dueTime=n,this.scheduler=r,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(w,this.dueTime,this))},t.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},t.prototype.debouncedNext=function(){this.clearDebounce(),this.hasValue&&(this.destination.next(this.lastValue),this.lastValue=null,this.hasValue=!1)},t.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},t}(Yl.a),wa=n("qqDE"),xa=function(){function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}return e.prototype.call=function(e,t){return t.subscribe(new Ca(e,this.nextOrObserver,this.error,this.complete))},e}(),Ca=function(e){function t(t,n,r,i){e.call(this,t);var o=new Yl.a(n,r,i);o.syncErrorThrowable=!0,this.add(o),this.safeSubscriber=o}return Object(bl.__extends)(t,e),t.prototype._next=function(e){var t=this.safeSubscriber;t.next(e),t.syncErrorThrown?this.destination.error(t.syncErrorValue):this.destination.next(e)},t.prototype._error=function(e){var t=this.safeSubscriber;t.error(e),this.destination.error(t.syncErrorThrown?t.syncErrorValue:e)},t.prototype._complete=function(){var e=this.safeSubscriber;e.complete(),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.complete()},t}(Yl.a),Ea=function(){function e(e){this._platform=e}return e.prototype.isDisabled=function(e){return e.hasAttribute("disabled")},e.prototype.isVisible=function(e){return!!(e.offsetWidth||e.offsetHeight||"function"==typeof e.getClientRects&&e.getClientRects().length)&&"visible"===getComputedStyle(e).visibility},e.prototype.isTabbable=function(e){if(!this._platform.isBrowser)return!1;var t=(e.ownerDocument.defaultView||window).frameElement;if(t){var n=t&&t.nodeName.toLowerCase();if(-1===E(t))return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&"object"===n)return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&!this.isVisible(t))return!1}var r=e.nodeName.toLowerCase(),i=E(e);if(e.hasAttribute("contenteditable"))return-1!==i;if("iframe"===r)return!1;if("audio"===r){if(!e.hasAttribute("controls"))return!1;if(this._platform.BLINK)return!0}if("video"===r){if(!e.hasAttribute("controls")&&this._platform.TRIDENT)return!1;if(this._platform.BLINK||this._platform.FIREFOX)return!0}return("object"!==r||!this._platform.BLINK&&!this._platform.WEBKIT)&&!(this._platform.WEBKIT&&this._platform.IOS&&!function(e){var t=e.nodeName.toLowerCase(),n="input"===t&&e.type;return"text"===n||"password"===n||"select"===t||"textarea"===t}(e))&&e.tabIndex>=0},e.prototype.isFocusable=function(e){return function(e){return!function(e){return"input"==e.nodeName.toLowerCase()&&"hidden"==e.type}(e)&&(function(t){var n=e.nodeName.toLowerCase();return"input"===n||"select"===n||"button"===n||"textarea"===n}()||function(e){return"a"==e.nodeName.toLowerCase()&&e.hasAttribute("href")}(e)||e.hasAttribute("contenteditable")||C(e))}(e)&&!this.isDisabled(e)&&this.isVisible(e)},e}(),Sa=function(){function e(e,t,n,r,i){void 0===i&&(i=!1),this._element=e,this._checker=t,this._ngZone=n,this._document=r,this._enabled=!0,i||this.attachAnchors()}return Object.defineProperty(e.prototype,"enabled",{get:function(){return this._enabled},set:function(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._startAnchor.tabIndex=this._endAnchor.tabIndex=this._enabled?0:-1)},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this._startAnchor&&this._startAnchor.parentNode&&this._startAnchor.parentNode.removeChild(this._startAnchor),this._endAnchor&&this._endAnchor.parentNode&&this._endAnchor.parentNode.removeChild(this._endAnchor),this._startAnchor=this._endAnchor=null},e.prototype.attachAnchors=function(){var e=this;this._startAnchor||(this._startAnchor=this._createAnchor()),this._endAnchor||(this._endAnchor=this._createAnchor()),this._ngZone.runOutsideAngular(function(){e._startAnchor.addEventListener("focus",function(){e.focusLastTabbableElement()}),e._endAnchor.addEventListener("focus",function(){e.focusFirstTabbableElement()}),e._element.parentNode&&(e._element.parentNode.insertBefore(e._startAnchor,e._element),e._element.parentNode.insertBefore(e._endAnchor,e._element.nextSibling))})},e.prototype.focusInitialElementWhenReady=function(){var e=this;return new Promise(function(t){e._executeOnStable(function(){return t(e.focusInitialElement())})})},e.prototype.focusFirstTabbableElementWhenReady=function(){var e=this;return new Promise(function(t){e._executeOnStable(function(){return t(e.focusFirstTabbableElement())})})},e.prototype.focusLastTabbableElementWhenReady=function(){var e=this;return new Promise(function(t){e._executeOnStable(function(){return t(e.focusLastTabbableElement())})})},e.prototype._getRegionBoundary=function(e){for(var t=this._element.querySelectorAll("[cdk-focus-region-"+e+"], [cdkFocusRegion"+e+"], [cdk-focus-"+e+"]"),n=0;n<t.length;n++)t[n].hasAttribute("cdk-focus-"+e)?console.warn("Found use of deprecated attribute 'cdk-focus-"+e+"', use 'cdkFocusRegion"+e+"' instead.",t[n]):t[n].hasAttribute("cdk-focus-region-"+e)&&console.warn("Found use of deprecated attribute 'cdk-focus-region-"+e+"', use 'cdkFocusRegion"+e+"' instead.",t[n]);return"start"==e?t.length?t[0]:this._getFirstTabbableElement(this._element):t.length?t[t.length-1]:this._getLastTabbableElement(this._element)},e.prototype.focusInitialElement=function(){var e=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");return this._element.hasAttribute("cdk-focus-initial")&&console.warn("Found use of deprecated attribute 'cdk-focus-initial', use 'cdkFocusInitial' instead.",this._element),e?(e.focus(),!0):this.focusFirstTabbableElement()},e.prototype.focusFirstTabbableElement=function(){var e=this._getRegionBoundary("start");return e&&e.focus(),!!e},e.prototype.focusLastTabbableElement=function(){var e=this._getRegionBoundary("end");return e&&e.focus(),!!e},e.prototype._getFirstTabbableElement=function(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;for(var t=e.children||e.childNodes,n=0;n<t.length;n++){var r=t[n].nodeType===Node.ELEMENT_NODE?this._getFirstTabbableElement(t[n]):null;if(r)return r}return null},e.prototype._getLastTabbableElement=function(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;for(var t=e.children||e.childNodes,n=t.length-1;n>=0;n--){var r=t[n].nodeType===Node.ELEMENT_NODE?this._getLastTabbableElement(t[n]):null;if(r)return r}return null},e.prototype._createAnchor=function(){var e=this._document.createElement("div");return e.tabIndex=this._enabled?0:-1,e.classList.add("cdk-visually-hidden"),e.classList.add("cdk-focus-trap-anchor"),e},e.prototype._executeOnStable=function(e){this._ngZone.isStable?e():this._ngZone.onStable.asObservable().pipe(u(1)).subscribe(e)},e}(),Oa=function(){function e(e,t,n){this._checker=e,this._ngZone=t,this._document=n}return e.prototype.create=function(e,t){return void 0===t&&(t=!1),new Sa(e,this._checker,this._ngZone,this._document,t)},e}(),Ta=function(){function e(e,t,n){this._elementRef=e,this._focusTrapFactory=t,this._previouslyFocusedElement=null,this._document=n,this.focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement,!0)}return Object.defineProperty(e.prototype,"enabled",{get:function(){return this.focusTrap.enabled},set:function(e){this.focusTrap.enabled=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"autoCapture",{get:function(){return this._autoCapture},set:function(e){this._autoCapture=c(e)},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){this.focusTrap.destroy(),this._previouslyFocusedElement&&(this._previouslyFocusedElement.focus(),this._previouslyFocusedElement=null)},e.prototype.ngAfterContentInit=function(){this.focusTrap.attachAnchors(),this.autoCapture&&(this._previouslyFocusedElement=this._document.activeElement,this.focusTrap.focusInitialElementWhenReady())},e}(),ka="cdk-describedby-message",Da="cdk-describedby-host",Ia=0,Ra=new Map,Ma=null,Pa=function(){function e(e){this._document=e}return e.prototype.describe=function(e,t){t.trim()&&(Ra.has(t)||this._createMessageElement(t),this._isElementDescribedByMessage(e,t)||this._addMessageReference(e,t))},e.prototype.removeDescription=function(e,t){if(t.trim()){this._isElementDescribedByMessage(e,t)&&this._removeMessageReference(e,t);var n=Ra.get(t);n&&0===n.referenceCount&&this._deleteMessageElement(t),Ma&&0===Ma.childNodes.length&&this._deleteMessagesContainer()}},e.prototype.ngOnDestroy=function(){for(var e=this._document.querySelectorAll("["+Da+"]"),t=0;t<e.length;t++)this._removeCdkDescribedByReferenceIds(e[t]),e[t].removeAttribute(Da);Ma&&this._deleteMessagesContainer(),Ra.clear()},e.prototype._createMessageElement=function(e){var t=this._document.createElement("div");t.setAttribute("id",ka+"-"+Ia++),t.appendChild(this._document.createTextNode(e)),Ma||this._createMessagesContainer(),Ma.appendChild(t),Ra.set(e,{messageElement:t,referenceCount:0})},e.prototype._deleteMessageElement=function(e){var t=Ra.get(e),n=t&&t.messageElement;Ma&&n&&Ma.removeChild(n),Ra.delete(e)},e.prototype._createMessagesContainer=function(){(Ma=this._document.createElement("div")).setAttribute("id","cdk-describedby-message-container"),Ma.setAttribute("aria-hidden","true"),Ma.style.display="none",this._document.body.appendChild(Ma)},e.prototype._deleteMessagesContainer=function(){this._document.body.removeChild(Ma),Ma=null},e.prototype._removeCdkDescribedByReferenceIds=function(e){var t=S(e,"aria-describedby").filter(function(e){return 0!=e.indexOf(ka)});e.setAttribute("aria-describedby",t.join(" "))},e.prototype._addMessageReference=function(e,t){var n=Ra.get(t);!function(e,t,n){var r=S(e,"aria-describedby");r.some(function(e){return e.trim()==n.trim()})||(r.push(n.trim()),e.setAttribute("aria-describedby",r.join(" ")))}(e,0,n.messageElement.id),e.setAttribute(Da,""),n.referenceCount++},e.prototype._removeMessageReference=function(e,t){var n=Ra.get(t);n.referenceCount--,function(e,t,n){var r=S(e,"aria-describedby").filter(function(e){return e!=n.trim()});e.setAttribute("aria-describedby",r.join(" "))}(e,0,n.messageElement.id),e.removeAttribute(Da)},e.prototype._isElementDescribedByMessage=function(e,t){var n=S(e,"aria-describedby"),r=Ra.get(t),i=r&&r.messageElement.id;return!!i&&-1!=n.indexOf(i)},e}(),Na=new al.InjectionToken("liveAnnouncerElement"),Aa=function(){function e(e,t){this._document=t,this._liveElement=e||this._createLiveElement()}return e.prototype.announce=function(e,t){var n=this;void 0===t&&(t="polite"),this._liveElement.textContent="",this._liveElement.setAttribute("aria-live",t),setTimeout(function(){return n._liveElement.textContent=e},100)},e.prototype.ngOnDestroy=function(){this._liveElement&&this._liveElement.parentNode&&this._liveElement.parentNode.removeChild(this._liveElement)},e.prototype._createLiveElement=function(){var e=this._document.createElement("div");return e.classList.add("cdk-visually-hidden"),e.setAttribute("aria-atomic","true"),e.setAttribute("aria-live","polite"),this._document.body.appendChild(e),e},e}(),La=function(){function e(e,t){this._ngZone=e,this._platform=t,this._origin=null,this._windowFocused=!1,this._elementInfo=new WeakMap,this._unregisterGlobalListeners=function(){},this._monitoredElementCount=0}return e.prototype.monitor=function(e,t,n){var r=this;if(t instanceof al.Renderer2||(n=t),n=!!n,!this._platform.isBrowser)return vl(null);if(this._elementInfo.has(e)){var i=this._elementInfo.get(e);return i.checkChildren=n,i.subject.asObservable()}var o={unlisten:function(){},checkChildren:n,subject:new ml.Subject};this._elementInfo.set(e,o),this._incrementMonitoredElementCount();var l=function(t){return r._onFocus(t,e)},a=function(t){return r._onBlur(t,e)};return this._ngZone.runOutsideAngular(function(){e.addEventListener("focus",l,!0),e.addEventListener("blur",a,!0)}),o.unlisten=function(){e.removeEventListener("focus",l,!0),e.removeEventListener("blur",a,!0)},o.subject.asObservable()},e.prototype.stopMonitoring=function(e){var t=this._elementInfo.get(e);t&&(t.unlisten(),t.subject.complete(),this._setClasses(e),this._elementInfo.delete(e),this._decrementMonitoredElementCount())},e.prototype.focusVia=function(e,t){this._setOriginForCurrentEventQueue(t),e.focus()},e.prototype._registerGlobalListeners=function(){var e=this;if(this._platform.isBrowser){var t=function(){e._lastTouchTarget=null,e._setOriginForCurrentEventQueue("keyboard")},n=function(){e._lastTouchTarget||e._setOriginForCurrentEventQueue("mouse")},i=function(t){null!=e._touchTimeout&&clearTimeout(e._touchTimeout),e._lastTouchTarget=t.target,e._touchTimeout=setTimeout(function(){return e._lastTouchTarget=null},650)},o=function(){e._windowFocused=!0,setTimeout(function(){return e._windowFocused=!1},0)};this._ngZone.runOutsideAngular(function(){document.addEventListener("keydown",t,!0),document.addEventListener("mousedown",n,!0),document.addEventListener("touchstart",i,!r()||{passive:!0,capture:!0}),window.addEventListener("focus",o)}),this._unregisterGlobalListeners=function(){document.removeEventListener("keydown",t,!0),document.removeEventListener("mousedown",n,!0),document.removeEventListener("touchstart",i,!r()||{passive:!0,capture:!0}),window.removeEventListener("focus",o)}}},e.prototype._toggleClass=function(e,t,n){n?e.classList.add(t):e.classList.remove(t)},e.prototype._setClasses=function(e,t){this._elementInfo.get(e)&&(this._toggleClass(e,"cdk-focused",!!t),this._toggleClass(e,"cdk-touch-focused","touch"===t),this._toggleClass(e,"cdk-keyboard-focused","keyboard"===t),this._toggleClass(e,"cdk-mouse-focused","mouse"===t),this._toggleClass(e,"cdk-program-focused","program"===t))},e.prototype._setOriginForCurrentEventQueue=function(e){var t=this;this._origin=e,setTimeout(function(){return t._origin=null},0)},e.prototype._wasCausedByTouch=function(e){var t=e.target;return this._lastTouchTarget instanceof Node&&t instanceof Node&&(t===this._lastTouchTarget||t.contains(this._lastTouchTarget))},e.prototype._onFocus=function(e,t){var n=this._elementInfo.get(t);n&&(n.checkChildren||t===e.target)&&(this._origin||(this._origin=this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:this._wasCausedByTouch(e)?"touch":"program"),this._setClasses(t,this._origin),n.subject.next(this._origin),this._lastFocusOrigin=this._origin,this._origin=null)},e.prototype._onBlur=function(e,t){var n=this._elementInfo.get(t);!n||n.checkChildren&&e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)||(this._setClasses(t),n.subject.next(null))},e.prototype._incrementMonitoredElementCount=function(){1==++this._monitoredElementCount&&this._registerGlobalListeners()},e.prototype._decrementMonitoredElementCount=function(){--this._monitoredElementCount||(this._unregisterGlobalListeners(),this._unregisterGlobalListeners=function(){})},e}(),Fa=function(){function e(e,t){var n=this;this._elementRef=e,this._focusMonitor=t,this.cdkFocusChange=new al.EventEmitter,this._monitorSubscription=this._focusMonitor.monitor(this._elementRef.nativeElement,this._elementRef.nativeElement.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(function(e){return n.cdkFocusChange.emit(e)})}return e.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef.nativeElement),this._monitorSubscription.unsubscribe()},e}(),ja=function(){},Va=n("RyBE"),za=new al.InjectionToken("mat-sanity-checks"),Ba=function(){function e(e){this._sanityChecksEnabled=e,this._hasDoneGlobalChecks=!1,this._hasCheckedHammer=!1,this._document="object"==typeof document&&document?document:null,this._window="object"==typeof window&&window?window:null,this._areChecksEnabled()&&!this._hasDoneGlobalChecks&&(this._checkDoctypeIsDefined(),this._checkThemeIsPresent(),this._hasDoneGlobalChecks=!0)}return e.prototype._areChecksEnabled=function(){return this._sanityChecksEnabled&&Object(al.isDevMode)()&&!this._isTestEnv()},e.prototype._isTestEnv=function(){return this._window&&(this._window.__karma__||this._window.jasmine)},e.prototype._checkDoctypeIsDefined=function(){this._document&&!this._document.doctype&&console.warn("Current document does not have a doctype. This may cause some Angular Material components not to behave as expected.")},e.prototype._checkThemeIsPresent=function(){if(this._document&&"function"==typeof getComputedStyle){var e=this._document.createElement("div");e.classList.add("mat-theme-loaded-marker"),this._document.body.appendChild(e);var t=getComputedStyle(e);t&&"none"!==t.display&&console.warn("Could not find Angular Material core theme. Most Material components may not work as expected. For more info refer to the theming guide: https://material.angular.io/guide/theming"),this._document.body.removeChild(e)}},e.prototype._checkHammerIsAvailable=function(){!this._hasCheckedHammer&&this._window&&(this._areChecksEnabled()&&!this._window.Hammer&&console.warn("Could not find HammerJS. Certain Angular Material components may not work correctly."),this._hasCheckedHammer=!0)},e}(),Ha=new al.InjectionToken("MAT_DATE_LOCALE"),Wa=function(){function e(){this._localeChanges=new ml.Subject}return Object.defineProperty(e.prototype,"localeChanges",{get:function(){return this._localeChanges},enumerable:!0,configurable:!0}),e.prototype.deserialize=function(e){return null==e||this.isDateInstance(e)&&this.isValid(e)?e:this.invalid()},e.prototype.setLocale=function(e){this.locale=e,this._localeChanges.next()},e.prototype.compareDate=function(e,t){return this.getYear(e)-this.getYear(t)||this.getMonth(e)-this.getMonth(t)||this.getDate(e)-this.getDate(t)},e.prototype.sameDate=function(e,t){if(e&&t){var n=this.isValid(e),r=this.isValid(t);return n&&r?!this.compareDate(e,t):n==r}return e==t},e.prototype.clampDate=function(e,t,n){return t&&this.compareDate(e,t)<0?t:n&&this.compareDate(e,n)>0?n:e},e}(),qa=new al.InjectionToken("mat-date-formats"),Ua="undefined"!=typeof Intl,Ga={long:["January","February","March","April","May","June","July","August","September","October","November","December"],short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],narrow:["J","F","M","A","M","J","J","A","S","O","N","D"]},Ka=M(31,function(e){return String(e+1)}),$a={long:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],narrow:["S","M","T","W","T","F","S"]},Za=/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/,Qa=function(e){function t(t){var n=e.call(this)||this;return e.prototype.setLocale.call(n,t),n.useUtcForDisplay=!("object"==typeof document&&document&&/(msie|trident)/i.test(navigator.userAgent)),n}return Object(bl.__extends)(t,e),t.prototype.getYear=function(e){return e.getFullYear()},t.prototype.getMonth=function(e){return e.getMonth()},t.prototype.getDate=function(e){return e.getDate()},t.prototype.getDayOfWeek=function(e){return e.getDay()},t.prototype.getMonthNames=function(e){var t=this;if(Ua){var n=new Intl.DateTimeFormat(this.locale,{month:e});return M(12,function(e){return t._stripDirectionalityCharacters(n.format(new Date(2017,e,1)))})}return Ga[e]},t.prototype.getDateNames=function(){var e=this;if(Ua){var t=new Intl.DateTimeFormat(this.locale,{day:"numeric"});return M(31,function(n){return e._stripDirectionalityCharacters(t.format(new Date(2017,0,n+1)))})}return Ka},t.prototype.getDayOfWeekNames=function(e){var t=this;if(Ua){var n=new Intl.DateTimeFormat(this.locale,{weekday:e});return M(7,function(e){return t._stripDirectionalityCharacters(n.format(new Date(2017,0,e+1)))})}return $a[e]},t.prototype.getYearName=function(e){if(Ua){var t=new Intl.DateTimeFormat(this.locale,{year:"numeric"});return this._stripDirectionalityCharacters(t.format(e))}return String(this.getYear(e))},t.prototype.getFirstDayOfWeek=function(){return 0},t.prototype.getNumDaysInMonth=function(e){return this.getDate(this._createDateWithOverflow(this.getYear(e),this.getMonth(e)+1,0))},t.prototype.clone=function(e){return this.createDate(this.getYear(e),this.getMonth(e),this.getDate(e))},t.prototype.createDate=function(e,t,n){if(t<0||t>11)throw Error('Invalid month index "'+t+'". Month index has to be between 0 and 11.');if(n<1)throw Error('Invalid date "'+n+'". Date has to be greater than 0.');var r=this._createDateWithOverflow(e,t,n);if(r.getMonth()!=t)throw Error('Invalid date "'+n+'" for month with index "'+t+'".');return r},t.prototype.today=function(){return new Date},t.prototype.parse=function(e){return"number"==typeof e?new Date(e):e?new Date(Date.parse(e)):null},t.prototype.format=function(e,t){if(!this.isValid(e))throw Error("NativeDateAdapter: Cannot format invalid date.");if(Ua){this.useUtcForDisplay&&(e=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())),t=Object(bl.__assign)({},t,{timeZone:"utc"}));var n=new Intl.DateTimeFormat(this.locale,t);return this._stripDirectionalityCharacters(n.format(e))}return this._stripDirectionalityCharacters(e.toDateString())},t.prototype.addCalendarYears=function(e,t){return this.addCalendarMonths(e,12*t)},t.prototype.addCalendarMonths=function(e,t){var n=this._createDateWithOverflow(this.getYear(e),this.getMonth(e)+t,this.getDate(e));return this.getMonth(n)!=((this.getMonth(e)+t)%12+12)%12&&(n=this._createDateWithOverflow(this.getYear(n),this.getMonth(n),0)),n},t.prototype.addCalendarDays=function(e,t){return this._createDateWithOverflow(this.getYear(e),this.getMonth(e),this.getDate(e)+t)},t.prototype.toIso8601=function(e){return[e.getUTCFullYear(),this._2digit(e.getUTCMonth()+1),this._2digit(e.getUTCDate())].join("-")},t.prototype.deserialize=function(t){if("string"==typeof t){if(!t)return null;if(Za.test(t)){var n=new Date(t);if(this.isValid(n))return n}}return e.prototype.deserialize.call(this,t)},t.prototype.isDateInstance=function(e){return e instanceof Date},t.prototype.isValid=function(e){return!isNaN(e.getTime())},t.prototype.invalid=function(){return new Date(NaN)},t.prototype._createDateWithOverflow=function(e,t,n){var r=new Date(e,t,n);return e>=0&&e<100&&r.setFullYear(this.getYear(r)-1900),r},t.prototype._2digit=function(e){return("00"+e).slice(-2)},t.prototype._stripDirectionalityCharacters=function(e){return e.replace(/[\u200e\u200f]/g,"")},t}(Wa),Ya={parse:{dateInput:null},display:{dateInput:{year:"numeric",month:"numeric",day:"numeric"},monthYearLabel:{year:"numeric",month:"short"},dateA11yLabel:{year:"numeric",month:"long",day:"numeric"},monthYearA11yLabel:{year:"numeric",month:"long"}}},Xa=function(){},Ja=function(){},es=function(){function e(){}return e.prototype.isErrorState=function(e,t){return!!(e&&e.invalid&&(e.touched||t&&t.submitted))},e}(),ts=new al.InjectionToken("MAT_HAMMER_OPTIONS"),ns=function(e){function t(t,n){var r=e.call(this)||this;return r._hammerOptions=t,r._hammer="undefined"!=typeof window?window.Hammer:null,r.events=r._hammer?["longpress","slide","slidestart","slideend","slideright","slideleft"]:[],n&&n._checkHammerIsAvailable(),r}return Object(bl.__extends)(t,e),t.prototype.buildHammer=function(e){var t=new this._hammer(e,this._hammerOptions||void 0),n=new this._hammer.Pan,r=new this._hammer.Swipe,i=new this._hammer.Press,o=this._createRecognizer(n,{event:"slide",threshold:0},r),l=this._createRecognizer(i,{event:"longpress",time:500});return n.recognizeWith(r),t.add([r,i,n,o,l]),t},t.prototype._createRecognizer=function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var i=new e.constructor(t);return n.push(e),n.forEach(function(e){return i.recognizeWith(e)}),i},t}(Va.g),rs=function(){},is=function(){var e={FADING_IN:0,VISIBLE:1,FADING_OUT:2,HIDDEN:3};return e[e.FADING_IN]="FADING_IN",e[e.VISIBLE]="VISIBLE",e[e.FADING_OUT]="FADING_OUT",e[e.HIDDEN]="HIDDEN",e}(),os=function(){function e(e,t,n){this._renderer=e,this.element=t,this.config=n,this.state=is.HIDDEN}return e.prototype.fadeOut=function(){this._renderer.fadeOutRipple(this)},e}(),ls=function(){function e(e,t,n){this._ngZone=t,this._isPointerDown=!1,this._triggerEvents=new Map,this._activeRipples=new Set,this.rippleConfig={},this.rippleDisabled=!1,n.isBrowser&&(this._containerElement=e.nativeElement,this._triggerEvents.set("mousedown",this.onMousedown.bind(this)),this._triggerEvents.set("mouseup",this.onPointerUp.bind(this)),this._triggerEvents.set("mouseleave",this.onPointerUp.bind(this)),this._triggerEvents.set("touchstart",this.onTouchStart.bind(this)),this._triggerEvents.set("touchend",this.onPointerUp.bind(this)),this.setTriggerElement(this._containerElement))}return e.prototype.fadeInRipple=function(e,t,n){var r=this;void 0===n&&(n={});var i=this._containerElement.getBoundingClientRect();n.centered&&(e=i.left+i.width/2,t=i.top+i.height/2);var o=n.radius||function(e,t,n){var r=Math.max(Math.abs(e-n.left),Math.abs(e-n.right)),i=Math.max(Math.abs(t-n.top),Math.abs(t-n.bottom));return Math.sqrt(r*r+i*i)}(e,t,i),l=450/(n.speedFactor||1),a=e-i.left,s=t-i.top,u=document.createElement("div");u.classList.add("mat-ripple-element"),u.style.left=a-o+"px",u.style.top=s-o+"px",u.style.height=2*o+"px",u.style.width=2*o+"px",u.style.backgroundColor=n.color||null,u.style.transitionDuration=l+"ms",this._containerElement.appendChild(u),function(e){window.getComputedStyle(e).getPropertyValue("opacity")}(u),u.style.transform="scale(1)";var c=new os(this,u,n);return c.state=is.FADING_IN,this._activeRipples.add(c),this.runTimeoutOutsideZone(function(){c.state=is.VISIBLE,n.persistent||r._isPointerDown||c.fadeOut()},l),c},e.prototype.fadeOutRipple=function(e){if(this._activeRipples.delete(e)){var t=e.element;t.style.transitionDuration="400ms",t.style.opacity="0",e.state=is.FADING_OUT,this.runTimeoutOutsideZone(function(){e.state=is.HIDDEN,t.parentNode.removeChild(t)},400)}},e.prototype.fadeOutAll=function(){this._activeRipples.forEach(function(e){return e.fadeOut()})},e.prototype.setTriggerElement=function(e){var t=this;this._triggerElement&&this._triggerEvents.forEach(function(e,n){t._triggerElement.removeEventListener(n,e)}),e&&this._ngZone.runOutsideAngular(function(){t._triggerEvents.forEach(function(t,n){return e.addEventListener(n,t)})}),this._triggerElement=e},e.prototype.onMousedown=function(e){var t=this._lastTouchStartEvent&&Date.now()<this._lastTouchStartEvent+800;this.rippleDisabled||t||(this._isPointerDown=!0,this.fadeInRipple(e.clientX,e.clientY,this.rippleConfig))},e.prototype.onTouchStart=function(e){this.rippleDisabled||(this._lastTouchStartEvent=Date.now(),this._isPointerDown=!0,this.fadeInRipple(e.touches[0].clientX,e.touches[0].clientY,this.rippleConfig))},e.prototype.onPointerUp=function(){this._isPointerDown&&(this._isPointerDown=!1,this._activeRipples.forEach(function(e){e.config.persistent||e.state!==is.VISIBLE||e.fadeOut()}))},e.prototype.runTimeoutOutsideZone=function(e,t){void 0===t&&(t=0),this._ngZone.runOutsideAngular(function(){return setTimeout(e,t)})},e}(),as=new al.InjectionToken("mat-ripple-global-options"),ss=function(){function e(e,t,n,r){this.radius=0,this.speedFactor=1,this._rippleRenderer=new ls(e,t,n),this._globalOptions=r||{},this._updateRippleRenderer()}return e.prototype.ngOnChanges=function(e){e.trigger&&this.trigger&&this._rippleRenderer.setTriggerElement(this.trigger),this._updateRippleRenderer()},e.prototype.ngOnDestroy=function(){this._rippleRenderer.setTriggerElement(null)},e.prototype.launch=function(e,t,n){return void 0===n&&(n=this.rippleConfig),this._rippleRenderer.fadeInRipple(e,t,n)},e.prototype.fadeOutAll=function(){this._rippleRenderer.fadeOutAll()},Object.defineProperty(e.prototype,"rippleConfig",{get:function(){return{centered:this.centered,speedFactor:this.speedFactor*(this._globalOptions.baseSpeedFactor||1),radius:this.radius,color:this.color}},enumerable:!0,configurable:!0}),e.prototype._updateRippleRenderer=function(){this._rippleRenderer.rippleDisabled=this._globalOptions.disabled||this.disabled,this._rippleRenderer.rippleConfig=this.rippleConfig},e}(),us=function(){},cs=function(){},ds=function(){},ps=new al.InjectionToken("mat-label-global-options"),fs=function(e){function t(t){e.call(this),this.observableFactory=t}return Object(bl.__extends)(t,e),t.create=function(e){return new t(e)},t.prototype._subscribe=function(e){return new hs(e,this.observableFactory)},t}(gl.a),hs=function(e){function t(t,n){e.call(this,t),this.factory=n,this.tryDefer()}return Object(bl.__extends)(t,e),t.prototype.tryDefer=function(){try{this._callFactory()}catch(e){this._error(e)}},t.prototype._callFactory=function(){var e=this.factory();e&&this.add(Object(Dl.a)(this,e))},t}(kl.a),ms=fs.create,gs=n("8Ut3"),ys=n("kQVV"),vs=n("mHG6"),bs=n("KRwF"),_s=n("xIGM"),ws=n("X3fp"),xs=function(e){function t(t,n){if(e.call(this),this.scheduler=n,null==t)throw new Error("iterator cannot be null.");this.iterator=function(e){var t=e[ws.a];if(!t&&"string"==typeof e)return new Cs(e);if(!t&&void 0!==e.length)return new Es(e);if(!t)throw new TypeError("object is not iterable");return e[ws.a]()}(t)}return Object(bl.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.dispatch=function(e){var t=e.index,n=e.iterator,r=e.subscriber;if(e.hasError)r.error(e.error);else{var i=n.next();i.done?r.complete():(r.next(i.value),e.index=t+1,r.closed?"function"==typeof n.return&&n.return():this.schedule(e))}},t.prototype._subscribe=function(e){var n=this.iterator,r=this.scheduler;if(r)return r.schedule(t.dispatch,0,{index:0,iterator:n,subscriber:e});for(;;){var i=n.next();if(i.done){e.complete();break}if(e.next(i.value),e.closed){"function"==typeof n.return&&n.return();break}}},t}(gl.a),Cs=function(){function e(e,t,n){void 0===t&&(t=0),void 0===n&&(n=e.length),this.str=e,this.idx=t,this.len=n}return e.prototype[ws.a]=function(){return this},e.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.str.charAt(this.idx++)}:{done:!0,value:void 0}},e}(),Es=function(){function e(e,t,n){void 0===t&&(t=0),void 0===n&&(n=function(t){var n=+e.length;return isNaN(n)?0:0!==n&&"number"==typeof n&&_s.a.isFinite(n)?(n=function(e){var t=+n;return 0===t?t:isNaN(t)?t:t<0?-1:1}()*Math.floor(Math.abs(n)))<=0?0:n>Ss?Ss:n:n}()),this.arr=e,this.idx=t,this.len=n}return e.prototype[ws.a]=function(){return this},e.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.arr[this.idx++]}:{done:!0,value:void 0}},e}(),Ss=Math.pow(2,53)-1,Os=function(e){function t(t,n){e.call(this),this.arrayLike=t,this.scheduler=n,n||1!==t.length||(this._isScalar=!0,this.value=t[0])}return Object(bl.__extends)(t,e),t.create=function(e,n){var r=e.length;return 0===r?new Jl.a:1===r?new gs.a(e[0],n):new t(e,n)},t.dispatch=function(e){var t=e.arrayLike,n=e.index,r=e.subscriber;r.closed||(n>=e.length?r.complete():(r.next(t[n]),e.index=n+1,this.schedule(e)))},t.prototype._subscribe=function(e){var n=this.arrayLike,r=this.scheduler,i=n.length;if(r)return r.schedule(t.dispatch,0,{arrayLike:n,index:0,length:i,subscriber:e});for(var o=0;o<i&&!e.closed;o++)e.next(n[o]);e.complete()},t}(gl.a),Ts=n("YRqN"),ks=n("mz3w"),Ds=function(e){function t(t,n){e.call(this,null),this.ish=t,this.scheduler=n}return Object(bl.__extends)(t,e),t.create=function(e,n){if(null!=e){if("function"==typeof e[ks.a])return e instanceof gl.a&&!n?e:new t(e,n);if(Object(Ml.a)(e))return new yl.a(e,n);if(Object(vs.a)(e))return new bs.a(e,n);if("function"==typeof e[ws.a]||"string"==typeof e)return new xs(e,n);if(Object(ys.a)(e))return new Os(e,n)}throw new TypeError((null!==e&&typeof e||e)+" is not observable")},t.prototype._subscribe=function(e){var t=this.ish,n=this.scheduler;return null==n?t[ks.a]().subscribe(e):t[ks.a]().subscribe(new Ts.a(e,n,0))},t}(gl.a).create,Is=n("bywS"),Rs=n("fAeS"),Ms=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._elementRef=t,o._focusTrapFactory=n,o._changeDetectorRef=r,o._document=i,o._elementFocusedBeforeDialogWasOpened=null,o._state="enter",o._animationStateChanged=new al.EventEmitter,o._ariaLabelledBy=null,o}return Object(bl.__extends)(t,e),t.prototype.attachComponentPortal=function(e){return this._portalOutlet.hasAttached()&&N(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachComponentPortal(e)},t.prototype.attachTemplatePortal=function(e){return this._portalOutlet.hasAttached()&&N(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachTemplatePortal(e)},t.prototype._trapFocus=function(){this._focusTrap||(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement)),this._config.autoFocus&&this._focusTrap.focusInitialElementWhenReady()},t.prototype._restoreFocus=function(){var e=this._elementFocusedBeforeDialogWasOpened;e&&"function"==typeof e.focus&&e.focus(),this._focusTrap&&this._focusTrap.destroy()},t.prototype._savePreviouslyFocusedElement=function(){var e=this;this._document&&(this._elementFocusedBeforeDialogWasOpened=this._document.activeElement,Promise.resolve().then(function(){return e._elementRef.nativeElement.focus()}))},t.prototype._onAnimationDone=function(e){"enter"===e.toState?this._trapFocus():"exit"===e.toState&&this._restoreFocus(),this._animationStateChanged.emit(e)},t.prototype._onAnimationStart=function(e){this._animationStateChanged.emit(e)},t.prototype._startExitAnimation=function(){this._state="exit",this._changeDetectorRef.markForCheck()},t}(Gl),Ps=0,Ns=function(){function e(e,t,n){void 0===n&&(n="mat-dialog-"+Ps++);var r=this;this._overlayRef=e,this._containerInstance=t,this.id=n,this.disableClose=this._containerInstance._config.disableClose,this._afterOpen=new ml.Subject,this._afterClosed=new ml.Subject,this._beforeClose=new ml.Subject,t._animationStateChanged.pipe(Object(Al.a)(function(e){return"done"===e.phaseName&&"enter"===e.toState}),u(1)).subscribe(function(){r._afterOpen.next(),r._afterOpen.complete()}),t._animationStateChanged.pipe(Object(Al.a)(function(e){return"done"===e.phaseName&&"exit"===e.toState}),u(1)).subscribe(function(){r._overlayRef.dispose(),r._afterClosed.next(r._result),r._afterClosed.complete(),r.componentInstance=null})}return e.prototype.close=function(e){var t=this;this._result=e,this._containerInstance._animationStateChanged.pipe(Object(Al.a)(function(e){return"start"===e.phaseName}),u(1)).subscribe(function(){t._beforeClose.next(e),t._beforeClose.complete(),t._overlayRef.detachBackdrop()}),this._containerInstance._startExitAnimation()},e.prototype.afterOpen=function(){return this._afterOpen.asObservable()},e.prototype.afterClosed=function(){return this._afterClosed.asObservable()},e.prototype.beforeClose=function(){return this._beforeClose.asObservable()},e.prototype.backdropClick=function(){return this._overlayRef.backdropClick()},e.prototype.keydownEvents=function(){return this._overlayRef.keydownEvents()},e.prototype.updatePosition=function(e){var t=this._getPositionStrategy();return e&&(e.left||e.right)?e.left?t.left(e.left):t.right(e.right):t.centerHorizontally(),e&&(e.top||e.bottom)?e.top?t.top(e.top):t.bottom(e.bottom):t.centerVertically(),this._overlayRef.updatePosition(),this},e.prototype.updateSize=function(e,t){return void 0===e&&(e="auto"),void 0===t&&(t="auto"),this._getPositionStrategy().width(e).height(t),this._overlayRef.updatePosition(),this},e.prototype._getPositionStrategy=function(){return this._overlayRef.getConfig().positionStrategy},e}(),As=new al.InjectionToken("MatDialogData"),Ls=new al.InjectionToken("mat-dialog-scroll-strategy"),Fs=function(){function e(e,t,n,r,i){var o=this;this._overlay=e,this._injector=t,this._scrollStrategy=r,this._parentDialog=i,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new ml.Subject,this._afterOpenAtThisLevel=new ml.Subject,this.afterAllClosed=ms(function(){return o.openDialogs.length?o._afterAllClosed:o._afterAllClosed.pipe(P(void 0))}),!i&&n&&n.subscribe(function(){return o.closeAll()})}return Object.defineProperty(e.prototype,"openDialogs",{get:function(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"afterOpen",{get:function(){return this._parentDialog?this._parentDialog.afterOpen:this._afterOpenAtThisLevel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_afterAllClosed",{get:function(){var e=this._parentDialog;return e?e._afterAllClosed:this._afterAllClosedAtThisLevel},enumerable:!0,configurable:!0}),e.prototype.open=function(e,t){var n=this;if((t=function(e){return Object(bl.__assign)({},new function(){this.role="dialog",this.panelClass="",this.hasBackdrop=!0,this.backdropClass="",this.disableClose=!1,this.width="",this.height="",this.maxWidth="80vw",this.data=null,this.direction="ltr",this.ariaDescribedBy=null,this.ariaLabel=null,this.autoFocus=!0},e)}(t)).id&&this.getDialogById(t.id))throw Error('Dialog with id "'+t.id+'" exists already. The dialog id must be unique.');var r=this._createOverlay(t),i=this._attachDialogContainer(r,t),o=this._attachDialogContent(e,i,r,t);return this.openDialogs.push(o),o.afterClosed().subscribe(function(){return n._removeOpenDialog(o)}),this.afterOpen.next(o),o},e.prototype.closeAll=function(){for(var e=this.openDialogs.length;e--;)this.openDialogs[e].close()},e.prototype.getDialogById=function(e){return this.openDialogs.find(function(t){return t.id===e})},e.prototype._createOverlay=function(e){var t=this._getOverlayConfig(e);return this._overlay.create(t)},e.prototype._getOverlayConfig=function(e){var t=new ra({positionStrategy:this._overlay.position().global(),scrollStrategy:this._scrollStrategy(),panelClass:e.panelClass,hasBackdrop:e.hasBackdrop,direction:e.direction,minWidth:e.minWidth,minHeight:e.minHeight,maxWidth:e.maxWidth,maxHeight:e.maxHeight});return e.backdropClass&&(t.backdropClass=e.backdropClass),t},e.prototype._attachDialogContainer=function(e,t){var n=new ql(Ms,t.viewContainerRef),r=e.attach(n);return r.instance._config=t,r.instance},e.prototype._attachDialogContent=function(e,t,n,r){var i=new Ns(n,t,r.id);if(r.hasBackdrop&&n.backdropClick().subscribe(function(){i.disableClose||i.close()}),n.keydownEvents().pipe(Object(Al.a)(function(e){return 27===e.keyCode&&!i.disableClose})).subscribe(function(){return i.close()}),e instanceof al.TemplateRef)t.attachTemplatePortal(new Ul(e,null,{$implicit:r.data,dialogRef:i}));else{var o=this._createInjector(r,i,t),l=t.attachComponentPortal(new ql(e,void 0,o));i.componentInstance=l.instance}return i.updateSize(r.width,r.height).updatePosition(r.position),i},e.prototype._createInjector=function(e,t,n){var r=e&&e.viewContainerRef&&e.viewContainerRef.injector,i=new WeakMap;return i.set(Ns,t),i.set(Ms,n),i.set(As,e.data),i.set(Bl,{value:e.direction,change:vl()}),new Ql(r||this._injector,i)},e.prototype._removeOpenDialog=function(e){var t=this.openDialogs.indexOf(e);t>-1&&(this.openDialogs.splice(t,1),this.openDialogs.length||this._afterAllClosed.next())},e}(),js=0,Vs=function(){function e(e){this.dialogRef=e,this.ariaLabel="Close dialog"}return e.prototype.ngOnChanges=function(e){var t=e._matDialogClose||e._matDialogCloseResult;t&&(this.dialogResult=t.currentValue)},e}(),zs=function(){function e(e){this._container=e,this.id="mat-dialog-title-"+js++}return e.prototype.ngOnInit=function(){var e=this;this._container&&!this._container._ariaLabelledBy&&Promise.resolve().then(function(){return e._container._ariaLabelledBy=e.id})},e}(),Bs=function(){},Hs=function(){},Ws=function(){},qs=al["\u0275crt"]({encapsulation:2,styles:[".mat-dialog-container{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);display:block;padding:24px;border-radius:2px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%}@media screen and (-ms-high-contrast:active){.mat-dialog-container{outline:solid 1px}}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch;-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:12px 0;display:flex;flex-wrap:wrap}.mat-dialog-actions:last-child{margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button+.mat-button,.mat-dialog-actions .mat-button+.mat-raised-button,.mat-dialog-actions .mat-raised-button+.mat-button,.mat-dialog-actions .mat-raised-button+.mat-raised-button{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button+.mat-button,[dir=rtl] .mat-dialog-actions .mat-button+.mat-raised-button,[dir=rtl] .mat-dialog-actions .mat-raised-button+.mat-button,[dir=rtl] .mat-dialog-actions .mat-raised-button+.mat-raised-button{margin-left:0;margin-right:8px}"],data:{animation:[{type:7,name:"slideDialog",definitions:[{type:0,name:"enter",styles:{type:6,styles:{transform:"none",opacity:1},offset:null},options:void 0},{type:0,name:"void",styles:{type:6,styles:{transform:"translate3d(0, 25%, 0) scale(0.9)",opacity:0},offset:null},options:void 0},{type:0,name:"exit",styles:{type:6,styles:{transform:"translate3d(0, 25%, 0)",opacity:0},offset:null},options:void 0},{type:1,expr:"* => *",animation:{type:4,styles:null,timings:"400ms cubic-bezier(0.25, 0.8, 0.25, 1)"},options:null}],options:{}}]}}),Us=al["\u0275ccf"]("mat-dialog-container",Ms,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-dialog-container",[["class","mat-dialog-container"],["tabindex","-1"]],[[1,"role",0],[1,"aria-labelledby",0],[1,"aria-label",0],[1,"aria-describedby",0],[40,"@slideDialog",0]],[["component","@slideDialog.start"],["component","@slideDialog.done"]],function(e,t,n){var r=!0;return"component:@slideDialog.start"===t&&(r=!1!==al["\u0275nov"](e,1)._onAnimationStart(n)&&r),"component:@slideDialog.done"===t&&(r=!1!==al["\u0275nov"](e,1)._onAnimationDone(n)&&r),r},F,qs)),al["\u0275did"](1,49152,null,0,Ms,[al.ElementRef,Oa,al.ChangeDetectorRef,[2,cl.DOCUMENT]],null,null)],null,function(e,t){e(t,0,0,null==al["\u0275nov"](t,1)._config?null:al["\u0275nov"](t,1)._config.role,null!=al["\u0275nov"](t,1)._config&&al["\u0275nov"](t,1)._config.ariaLabel?null:al["\u0275nov"](t,1)._ariaLabelledBy,null==al["\u0275nov"](t,1)._config?null:al["\u0275nov"](t,1)._config.ariaLabel,(null==al["\u0275nov"](t,1)._config?null:al["\u0275nov"](t,1)._config.ariaDescribedBy)||null,al["\u0275nov"](t,1)._state)})},{},{},[]),Gs=function(){},Ks=function(){},$s=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i._platform=n,i._focusMonitor=r,i._isRoundButton=i._hasHostAttributes("mat-fab","mat-mini-fab"),i._isIconButton=i._hasHostAttributes("mat-icon-button"),i._focusMonitor.monitor(i._elementRef.nativeElement,!0),i}return Object(bl.__extends)(t,e),t.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef.nativeElement)},t.prototype.focus=function(){this._getHostElement().focus()},t.prototype._getHostElement=function(){return this._elementRef.nativeElement},t.prototype._isRippleDisabled=function(){return this.disableRipple||this.disabled},t.prototype._hasHostAttributes=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return!!this._platform.isBrowser&&t.some(function(t){return e._getHostElement().hasAttribute(t)})},t}(I(D(R(function(e){this._elementRef=e})))),Zs=function(e){function t(t,n,r){return e.call(this,r,t,n)||this}return Object(bl.__extends)(t,e),t.prototype._haltDisabledEvents=function(e){this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},t}($s),Qs=function(){},Ys=function(){function e(e){this.selector=e}return e.prototype.call=function(e,t){return t.subscribe(new Xs(e,this.selector,this.caught))},e}(),Xs=function(e){function t(t,n,r){e.call(this,t),this.selector=n,this.caught=r}return Object(bl.__extends)(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=void 0;try{n=this.selector(t,this.caught)}catch(t){return void e.prototype.error.call(this,t)}this._unsubscribeAndRecycle(),this.add(Object(Dl.a)(this,n))}},t}(kl.a),Js=function(){function e(e){this.callback=e}return e.prototype.call=function(e,t){return t.subscribe(new eu(e,this.callback))},e}(),eu=function(e){function t(t,n){e.call(this,t),this.add(new Cl.a(n))}return Object(bl.__extends)(t,e),t}(Yl.a),tu=n("eIqN"),nu=n("wP3s"),ru=n("6S6c"),iu=n("dmC+"),ou=function(){},lu=function(){},au=function(){function e(e){var t=this;this.normalizedNames=new Map,this.lazyUpdate=null,e?this.lazyInit="string"==typeof e?function(){t.headers=new Map,e.split("\n").forEach(function(e){var n=e.indexOf(":");if(n>0){var r=e.slice(0,n),i=r.toLowerCase(),o=e.slice(n+1).trim();t.maybeSetNormalizedName(r,i),t.headers.has(i)?t.headers.get(i).push(o):t.headers.set(i,[o])}})}:function(){t.headers=new Map,Object.keys(e).forEach(function(n){var r=e[n],i=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(t.headers.set(i,r),t.maybeSetNormalizedName(n,i))})}:this.headers=new Map}return e.prototype.has=function(e){return this.init(),this.headers.has(e.toLowerCase())},e.prototype.get=function(e){this.init();var t=this.headers.get(e.toLowerCase());return t&&t.length>0?t[0]:null},e.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},e.prototype.getAll=function(e){return this.init(),this.headers.get(e.toLowerCase())||null},e.prototype.append=function(e,t){return this.clone({name:e,value:t,op:"a"})},e.prototype.set=function(e,t){return this.clone({name:e,value:t,op:"s"})},e.prototype.delete=function(e,t){return this.clone({name:e,value:t,op:"d"})},e.prototype.maybeSetNormalizedName=function(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)},e.prototype.init=function(){var t=this;this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(e){return t.applyUpdate(e)}),this.lazyUpdate=null))},e.prototype.copyFrom=function(e){var t=this;e.init(),Array.from(e.headers.keys()).forEach(function(n){t.headers.set(n,e.headers.get(n)),t.normalizedNames.set(n,e.normalizedNames.get(n))})},e.prototype.clone=function(t){var n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n},e.prototype.applyUpdate=function(e){var t=e.name.toLowerCase();switch(e.op){case"a":case"s":var n=e.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);var r=("a"===e.op?this.headers.get(t):void 0)||[];r.push.apply(r,n),this.headers.set(t,r);break;case"d":var i=e.value;if(i){var o=this.headers.get(t);if(!o)return;0===(o=o.filter(function(e){return-1===i.indexOf(e)})).length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,o)}else this.headers.delete(t),this.normalizedNames.delete(t)}},e.prototype.forEach=function(e){var t=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return e(t.normalizedNames.get(n),t.headers.get(n))})},e}(),su=function(){function e(){}return e.prototype.encodeKey=function(e){return V(e)},e.prototype.encodeValue=function(e){return V(e)},e.prototype.decodeKey=function(e){return decodeURIComponent(e)},e.prototype.decodeValue=function(e){return decodeURIComponent(e)},e}(),uu=function(){function e(e){void 0===e&&(e={});var t=this;if(this.updates=null,this.cloneFrom=null,this.encoder=e.encoder||new su,e.fromString){if(e.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function(e,t){var n=new Map;return e.length>0&&e.split("&").forEach(function(e){var r=e.indexOf("="),i=-1==r?[t.decodeKey(e),""]:[t.decodeKey(e.slice(0,r)),t.decodeValue(e.slice(r+1))],o=i[0],l=i[1],a=n.get(o)||[];a.push(l),n.set(o,a)}),n}(e.fromString,this.encoder)}else e.fromObject?(this.map=new Map,Object.keys(e.fromObject).forEach(function(n){var r=e.fromObject[n];t.map.set(n,Array.isArray(r)?r:[r])})):this.map=null}return e.prototype.has=function(e){return this.init(),this.map.has(e)},e.prototype.get=function(e){this.init();var t=this.map.get(e);return t?t[0]:null},e.prototype.getAll=function(e){return this.init(),this.map.get(e)||null},e.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},e.prototype.append=function(e,t){return this.clone({param:e,value:t,op:"a"})},e.prototype.set=function(e,t){return this.clone({param:e,value:t,op:"s"})},e.prototype.delete=function(e,t){return this.clone({param:e,value:t,op:"d"})},e.prototype.toString=function(){var e=this;return this.init(),this.keys().map(function(t){var n=e.encoder.encodeKey(t);return e.map.get(t).map(function(t){return n+"="+e.encoder.encodeValue(t)}).join("&")}).join("&")},e.prototype.clone=function(t){var n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat([t]),n},e.prototype.init=function(){var e=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(t){return e.map.set(t,e.cloneFrom.map.get(t))}),this.updates.forEach(function(t){switch(t.op){case"a":case"s":var n=("a"===t.op?e.map.get(t.param):void 0)||[];n.push(t.value),e.map.set(t.param,n);break;case"d":if(void 0===t.value){e.map.delete(t.param);break}var r=e.map.get(t.param)||[],i=r.indexOf(t.value);-1!==i&&r.splice(i,1),r.length>0?e.map.set(t.param,r):e.map.delete(t.param)}}),this.cloneFrom=null)},e}(),cu=function(){function e(e,t,n,r){this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=e.toUpperCase();var i;if(function(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new au),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=t;else{var l=t.indexOf("?");this.urlWithParams=t+(-1===l?"?":l<t.length-1?"&":"")+o}}else this.params=new uu,this.urlWithParams=t}return e.prototype.serializeBody=function(){return null===this.body?null:z(this.body)||B(this.body)||H(this.body)||"string"==typeof this.body?this.body:this.body instanceof uu?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()},e.prototype.detectContentTypeHeader=function(){return null===this.body?null:H(this.body)?null:B(this.body)?this.body.type||null:z(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof uu?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||Array.isArray(this.body)?"application/json":null},e.prototype.clone=function(t){void 0===t&&(t={});var n=t.method||this.method,r=t.url||this.url,i=t.responseType||this.responseType,o=void 0!==t.body?t.body:this.body,l=void 0!==t.withCredentials?t.withCredentials:this.withCredentials,a=void 0!==t.reportProgress?t.reportProgress:this.reportProgress,s=t.headers||this.headers,u=t.params||this.params;return void 0!==t.setHeaders&&(s=Object.keys(t.setHeaders).reduce(function(e,n){return e.set(n,t.setHeaders[n])},s)),t.setParams&&(u=Object.keys(t.setParams).reduce(function(e,n){return e.set(n,t.setParams[n])},u)),new e(n,r,o,{params:u,headers:s,reportProgress:a,responseType:i,withCredentials:l})},e}(),du=function(){var e={Sent:0,UploadProgress:1,ResponseHeader:2,DownloadProgress:3,Response:4,User:5};return e[e.Sent]="Sent",e[e.UploadProgress]="UploadProgress",e[e.ResponseHeader]="ResponseHeader",e[e.DownloadProgress]="DownloadProgress",e[e.Response]="Response",e[e.User]="User",e}(),pu=function(){return function(e,t,n){void 0===t&&(t=200),void 0===n&&(n="OK"),this.headers=e.headers||new au,this.status=void 0!==e.status?e.status:t,this.statusText=e.statusText||n,this.url=e.url||null,this.ok=this.status>=200&&this.status<300}}(),fu=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=du.ResponseHeader,n}return Object(bl.__extends)(t,e),t.prototype.clone=function(e){return void 0===e&&(e={}),new t({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},t}(pu),hu=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=du.Response,n.body=void 0!==t.body?t.body:null,n}return Object(bl.__extends)(t,e),t.prototype.clone=function(e){return void 0===e&&(e={}),new t({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},t}(pu),mu=function(e){function t(t){var n=e.call(this,t,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.message=n.status>=200&&n.status<300?"Http failure during parsing for "+(t.url||"(unknown url)"):"Http failure response for "+(t.url||"(unknown url)")+": "+t.status+" "+t.statusText,n.error=t.error||null,n}return Object(bl.__extends)(t,e),t}(pu),gu=function(){function e(e){this.handler=e}return e.prototype.request=function(e,t,n){var r=this;void 0===n&&(n={});var i;if(e instanceof cu)i=e;else{var o=void 0;o=n.headers instanceof au?n.headers:new au(n.headers);var l=void 0;n.params&&(l=n.params instanceof uu?n.params:new uu({fromObject:n.params})),i=new cu(e,t,void 0!==n.body?n.body:null,{headers:o,params:l,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials})}var a=function(e,t){return function(e,t){return Object(nu.a)(e,t,1)}(e,t)(this)}.call(vl(i),function(e){return r.handler.handle(e)});if(e instanceof cu||"events"===n.observe)return a;var s=ru.a.call(a,function(e){return e instanceof hu});switch(n.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return iu.a.call(s,function(e){if(null!==e.body&&!(e.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return e.body});case"blob":return iu.a.call(s,function(e){if(null!==e.body&&!(e.body instanceof Blob))throw new Error("Response is not a Blob.");return e.body});case"text":return iu.a.call(s,function(e){if(null!==e.body&&"string"!=typeof e.body)throw new Error("Response is not a string.");return e.body});case"json":default:return iu.a.call(s,function(e){return e.body})}case"response":return s;default:throw new Error("Unreachable: unhandled observe type "+n.observe+"}")}},e.prototype.delete=function(e,t){return void 0===t&&(t={}),this.request("DELETE",e,t)},e.prototype.get=function(e,t){return void 0===t&&(t={}),this.request("GET",e,t)},e.prototype.head=function(e,t){return void 0===t&&(t={}),this.request("HEAD",e,t)},e.prototype.jsonp=function(e,t){return this.request("JSONP",e,{params:(new uu).append(t,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},e.prototype.options=function(e,t){return void 0===t&&(t={}),this.request("OPTIONS",e,t)},e.prototype.patch=function(e,t,n){return void 0===n&&(n={}),this.request("PATCH",e,W(n,t))},e.prototype.post=function(e,t,n){return void 0===n&&(n={}),this.request("POST",e,W(n,t))},e.prototype.put=function(e,t,n){return void 0===n&&(n={}),this.request("PUT",e,W(n,t))},e}(),yu=function(){function e(e,t){this.next=e,this.interceptor=t}return e.prototype.handle=function(e){return this.interceptor.intercept(e,this.next)},e}(),vu=new al.InjectionToken("HTTP_INTERCEPTORS"),bu=function(){function e(){}return e.prototype.intercept=function(e,t){return t.handle(e)},e}(),_u=/^\)\]\}',?\n/,wu=function(){},xu=function(){function e(){}return e.prototype.build=function(){return new XMLHttpRequest},e}(),Cu=function(){function e(e){this.xhrFactory=e}return e.prototype.handle=function(e){var t=this;if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new gl.a(function(n){var r=t.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach(function(e,t){return r.setRequestHeader(e,t.join(","))}),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){var i=e.detectContentTypeHeader();null!==i&&r.setRequestHeader("Content-Type",i)}if(e.responseType){var o=e.responseType.toLowerCase();r.responseType="json"!==o?o:"text"}var l=e.serializeBody(),a=null,s=function(){if(null!==a)return a;var t=1223===r.status?204:r.status,n=r.statusText||"OK",i=new au(r.getAllResponseHeaders()),o=function(e){return"responseURL"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader("X-Request-URL"):null}(r)||e.url;return a=new fu({headers:i,status:t,statusText:n,url:o})},u=function(){var t=s(),i=t.headers,o=t.status,l=t.statusText,a=t.url,u=null;204!==o&&(u=void 0===r.response?r.responseText:r.response),0===o&&(o=u?200:0);var c=o>=200&&o<300;if("json"===e.responseType&&"string"==typeof u){var d=u;u=u.replace(_u,"");try{u=""!==u?JSON.parse(u):null}catch(e){u=d,c&&(c=!1,u={error:e,text:u})}}c?(n.next(new hu({body:u,headers:i,status:o,statusText:l,url:a||void 0})),n.complete()):n.error(new mu({error:u,headers:i,status:o,statusText:l,url:a||void 0}))},c=function(e){var t=new mu({error:e,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(t)},d=!1,p=function(t){d||(n.next(s()),d=!0);var i={type:du.DownloadProgress,loaded:t.loaded};t.lengthComputable&&(i.total=t.total),"text"===e.responseType&&r.responseText&&(i.partialText=r.responseText),n.next(i)},f=function(e){var t={type:du.UploadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),n.next(t)};return r.addEventListener("load",u),r.addEventListener("error",c),e.reportProgress&&(r.addEventListener("progress",p),null!==l&&r.upload&&r.upload.addEventListener("progress",f)),r.send(l),n.next({type:du.Sent}),function(){r.removeEventListener("error",c),r.removeEventListener("load",u),e.reportProgress&&(r.removeEventListener("progress",p),null!==l&&r.upload&&r.upload.removeEventListener("progress",f)),r.abort()}})},e}(),Eu=new al.InjectionToken("XSRF_COOKIE_NAME"),Su=new al.InjectionToken("XSRF_HEADER_NAME"),Ou=function(){},Tu=function(){function e(e,t,n){this.doc=e,this.platform=t,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return e.prototype.getToken=function(){if("server"===this.platform)return null;var e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(cl["\u0275parseCookieValue"])(e,this.cookieName),this.lastCookieString=e),this.lastToken},e}(),ku=function(){function e(e,t){this.tokenService=e,this.headerName=t}return e.prototype.intercept=function(e,t){var n=e.url.toLowerCase();if("GET"===e.method||"HEAD"===e.method||n.startsWith("http://")||n.startsWith("https://"))return t.handle(e);var r=this.tokenService.getToken();return null===r||e.headers.has(this.headerName)||(e=e.clone({headers:e.headers.set(this.headerName,r)})),t.handle(e)},e}(),Du=function(){function e(){}return e.disable=function(){return{ngModule:e,providers:[{provide:ku,useClass:bu}]}},e.withOptions=function(t){return void 0===t&&(t={}),{ngModule:e,providers:[t.cookieName?{provide:Eu,useValue:t.cookieName}:[],t.headerName?{provide:Su,useValue:t.headerName}:[]]}},e}(),Iu=function(){},Ru=n("Jsyr"),Mu=function(e){function t(t,n){e.call(this),this.error=t,this.scheduler=n}return Object(bl.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.dispatch=function(e){e.subscriber.error(e.error)},t.prototype._subscribe=function(e){var n=this.error,r=this.scheduler;if(e.syncErrorThrowable=!0,r)return r.schedule(t.dispatch,0,{error:n,subscriber:e});e.error(n)},t}(gl.a).create,Pu=function(e){this.url=e,this.svgElement=null},Nu=function(){function e(e,t){this._httpClient=e,this._sanitizer=t,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._defaultFontSetClass="material-icons"}return e.prototype.addSvgIcon=function(e,t){return this.addSvgIconInNamespace("",e,t)},e.prototype.addSvgIconInNamespace=function(e,t,n){var r=Z(e,t);return this._svgIconConfigs.set(r,new Pu(n)),this},e.prototype.addSvgIconSet=function(e){return this.addSvgIconSetInNamespace("",e)},e.prototype.addSvgIconSetInNamespace=function(e,t){var n=new Pu(t),r=this._iconSetConfigs.get(e);return r?r.push(n):this._iconSetConfigs.set(e,[n]),this},e.prototype.registerFontClassAlias=function(e,t){return void 0===t&&(t=e),this._fontCssClassesByAlias.set(e,t),this},e.prototype.classNameForFontAlias=function(e){return this._fontCssClassesByAlias.get(e)||e},e.prototype.setDefaultFontSetClass=function(e){return this._defaultFontSetClass=e,this},e.prototype.getDefaultFontSetClass=function(){return this._defaultFontSetClass},e.prototype.getSvgIconFromUrl=function(e){var t=this,n=this._sanitizer.sanitize(al.SecurityContext.RESOURCE_URL,e);if(!n)throw G(e);var r=this._cachedIconsByUrl.get(n);return r?vl($(r)):this._loadSvgIconFromConfig(new Pu(e)).pipe(x(function(e){return t._cachedIconsByUrl.set(n,e)}),Object(wa.a)(function(e){return $(e)}))},e.prototype.getNamedSvgIcon=function(e,t){void 0===t&&(t="");var n=Z(t,e),r=this._svgIconConfigs.get(n);if(r)return this._getSvgFromConfig(r);var i=this._iconSetConfigs.get(t);return i?this._getSvgFromIconSetConfigs(e,i):Mu(U(n))},e.prototype._getSvgFromConfig=function(e){return e.svgElement?vl($(e.svgElement)):this._loadSvgIconFromConfig(e).pipe(x(function(t){return e.svgElement=t}),Object(wa.a)(function(e){return $(e)}))},e.prototype._getSvgFromIconSetConfigs=function(e,t){var n=this,r=this._extractIconWithNameFromAnySet(e,t);if(r)return vl(r);var i=t.filter(function(e){return!e.svgElement}).map(function(e){return n._loadSvgIconSetFromConfig(e).pipe(j(function(t){var r=n._sanitizer.sanitize(al.SecurityContext.RESOURCE_URL,e.url);return console.log("Loading icon set URL: "+r+" failed: "+t),vl(null)}),x(function(t){t&&(e.svgElement=t)}))});return Object(Ru.a)(i).pipe(Object(wa.a)(function(){var r=n._extractIconWithNameFromAnySet(e,t);if(!r)throw U(e);return r}))},e.prototype._extractIconWithNameFromAnySet=function(e,t){for(var n=t.length-1;n>=0;n--){var r=t[n];if(r.svgElement){var i=this._extractSvgIconFromSet(r.svgElement,e);if(i)return i}}return null},e.prototype._loadSvgIconFromConfig=function(e){var t=this;return this._fetchUrl(e.url).pipe(Object(wa.a)(function(e){return t._createSvgElementForSingleIcon(e)}))},e.prototype._loadSvgIconSetFromConfig=function(e){var t=this;return this._fetchUrl(e.url).pipe(Object(wa.a)(function(e){return t._svgElementFromString(e)}))},e.prototype._createSvgElementForSingleIcon=function(e){var t=this._svgElementFromString(e);return this._setSvgAttributes(t),t},e.prototype._extractSvgIconFromSet=function(e,t){var n=e.querySelector("#"+t);if(!n)return null;var r=n.cloneNode(!0);if(r.id="","svg"===r.nodeName.toLowerCase())return this._setSvgAttributes(r);if("symbol"===r.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(r));var i=this._svgElementFromString("<svg></svg>");return i.appendChild(r),this._setSvgAttributes(i)},e.prototype._svgElementFromString=function(e){var t=document.createElement("DIV");t.innerHTML=e;var n=t.querySelector("svg");if(!n)throw Error("<svg> tag not found");return n},e.prototype._toSvgElement=function(e){for(var t=this._svgElementFromString("<svg></svg>"),n=0;n<e.childNodes.length;n++)e.childNodes[n].nodeType===Node.ELEMENT_NODE&&t.appendChild(e.childNodes[n].cloneNode(!0));return t},e.prototype._setSvgAttributes=function(e){return e.getAttribute("xmlns")||e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.setAttribute("fit",""),e.setAttribute("height","100%"),e.setAttribute("width","100%"),e.setAttribute("preserveAspectRatio","xMidYMid meet"),e.setAttribute("focusable","false"),e},e.prototype._fetchUrl=function(e){var t=this;if(!this._httpClient)throw Error("Could not find HttpClient provider for use with Angular Material icons. Please include the HttpClientModule from @angular/common/http in your app imports.");var n=this._sanitizer.sanitize(al.SecurityContext.RESOURCE_URL,e);if(!n)throw G(e);var r=this._inProgressUrlFetches.get(n);if(r)return r;var i=this._httpClient.get(n,{responseType:"text"}).pipe(function(e){return function(t){return t.lift(new Js(e))}}(function(){return t._inProgressUrlFetches.delete(n)}),Object(tu.a)());return this._inProgressUrlFetches.set(n,i),i},e}(),Au=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i._iconRegistry=n,r||t.nativeElement.setAttribute("aria-hidden","true"),i}return Object(bl.__extends)(t,e),t.prototype._splitIconName=function(e){if(!e)return["",""];var t=e.split(":");switch(t.length){case 1:return["",t[0]];case 2:return t;default:throw Error('Invalid icon name: "'+e+'"')}},t.prototype.ngOnChanges=function(e){var t=this;if(e.svgIcon)if(this.svgIcon){var n=this._splitIconName(this.svgIcon);this._iconRegistry.getNamedSvgIcon(n[1],n[0]).pipe(u(1)).subscribe(function(e){return t._setSvgElement(e)},function(e){return console.log("Error retrieving icon: "+e.message)})}else this._clearSvgElement();this._usingFontIcon()&&this._updateFontIconClasses()},t.prototype.ngOnInit=function(){this._usingFontIcon()&&this._updateFontIconClasses()},t.prototype._usingFontIcon=function(){return!this.svgIcon},t.prototype._setSvgElement=function(e){this._clearSvgElement(),this._elementRef.nativeElement.appendChild(e)},t.prototype._clearSvgElement=function(){for(var e=this._elementRef.nativeElement,t=e.childNodes.length,n=0;n<t;n++)e.removeChild(e.childNodes[n])},t.prototype._updateFontIconClasses=function(){if(this._usingFontIcon()){var e=this._elementRef.nativeElement,t=this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet):this._iconRegistry.getDefaultFontSetClass();t!=this._previousFontSetClass&&(this._previousFontSetClass&&e.classList.remove(this._previousFontSetClass),t&&e.classList.add(t),this._previousFontSetClass=t),this.fontIcon!=this._previousFontIconClass&&(this._previousFontIconClass&&e.classList.remove(this._previousFontIconClass),this.fontIcon&&e.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}},t}(I(function(e){this._elementRef=e})),Lu=function(){},Fu=n("0nO6"),ju=function(){},Vu=0,zu=function(){function e(e,t,n){this._elementRef=e,this._changeDetectorRef=t,this.color="primary",this._showAlwaysAnimate=!1,this._subscriptAnimationState="",this._hintLabel="",this._hintLabelId="mat-hint-"+Vu++,this._labelOptions=n||{},this.floatLabel=this._labelOptions.float||"auto"}return Object.defineProperty(e.prototype,"dividerColor",{get:function(){return this.color},set:function(e){this.color=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hideRequiredMarker",{get:function(){return this._hideRequiredMarker},set:function(e){this._hideRequiredMarker=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_shouldAlwaysFloat",{get:function(){return"always"===this._floatLabel&&!this._showAlwaysAnimate},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_canLabelFloat",{get:function(){return"never"!==this._floatLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hintLabel",{get:function(){return this._hintLabel},set:function(e){this._hintLabel=e,this._processHints()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"floatPlaceholder",{get:function(){return this._floatLabel},set:function(e){this.floatLabel=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"floatLabel",{get:function(){return this._floatLabel},set:function(e){e!==this._floatLabel&&(this._floatLabel=e||this._labelOptions.float||"auto",this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){var e=this;this._validateControlChild(),this._control.controlType&&this._elementRef.nativeElement.classList.add("mat-form-field-type-"+this._control.controlType),this._control.stateChanges.pipe(P(null)).subscribe(function(){e._validatePlaceholders(),e._syncDescribedByIds(),e._changeDetectorRef.markForCheck()});var t=this._control.ngControl;t&&t.valueChanges&&t.valueChanges.subscribe(function(){e._changeDetectorRef.markForCheck()}),this._hintChildren.changes.pipe(P(null)).subscribe(function(){e._processHints(),e._changeDetectorRef.markForCheck()}),this._errorChildren.changes.pipe(P(null)).subscribe(function(){e._syncDescribedByIds(),e._changeDetectorRef.markForCheck()})},e.prototype.ngAfterContentChecked=function(){this._validateControlChild()},e.prototype.ngAfterViewInit=function(){this._subscriptAnimationState="enter",this._changeDetectorRef.detectChanges()},e.prototype._shouldForward=function(e){var t=this._control?this._control.ngControl:null;return t&&t[e]},e.prototype._hasPlaceholder=function(){return!(!this._control.placeholder&&!this._placeholderChild)},e.prototype._hasLabel=function(){return!!this._labelChild},e.prototype._shouldLabelFloat=function(){return this._canLabelFloat&&(this._control.shouldLabelFloat||this._control.shouldPlaceholderFloat||this._shouldAlwaysFloat)},e.prototype._hideControlPlaceholder=function(){return!this._hasLabel()||!this._shouldLabelFloat()},e.prototype._hasFloatingLabel=function(){return this._hasLabel()||this._hasPlaceholder()},e.prototype._getDisplayedMessages=function(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"},e.prototype._animateAndLockLabel=function(){var e=this;this._hasFloatingLabel()&&this._canLabelFloat&&(this._showAlwaysAnimate=!0,this._floatLabel="always",Sl(this._label.nativeElement,"transitionend").pipe(u(1)).subscribe(function(){e._showAlwaysAnimate=!1}),this._changeDetectorRef.markForCheck())},e.prototype._validatePlaceholders=function(){if(this._control.placeholder&&this._placeholderChild)throw Error("Placeholder attribute and child element were both specified.")},e.prototype._processHints=function(){this._validateHints(),this._syncDescribedByIds()},e.prototype._validateHints=function(){var e=this;if(this._hintChildren){var t,n;this._hintChildren.forEach(function(r){if("start"==r.align){if(t||e.hintLabel)throw Q("start");t=r}else if("end"==r.align){if(n)throw Q("end");n=r}})}},e.prototype._syncDescribedByIds=function(){if(this._control){var e=[];if("hint"===this._getDisplayedMessages()){var t=this._hintChildren?this._hintChildren.find(function(e){return"start"===e.align}):null,n=this._hintChildren?this._hintChildren.find(function(e){return"end"===e.align}):null;t?e.push(t.id):this._hintLabel&&e.push(this._hintLabelId),n&&e.push(n.id)}else this._errorChildren&&(e=this._errorChildren.map(function(e){return e.id}));this._control.setDescribedByIds(e)}},e.prototype._validateControlChild=function(){if(!this._control)throw Error("mat-form-field must contain a MatFormFieldControl.")},e}(),Bu=function(){},Hu=n("5O0w"),Wu=["button","checkbox","color","file","hidden","image","radio","range","reset","submit"],qu=0,Uu=function(e){function t(t,n,r,o,l,a,s){var u=e.call(this,a,o,l,r)||this;return u._elementRef=t,u._platform=n,u.ngControl=r,u._type="text",u._disabled=!1,u._required=!1,u._uid="mat-input-"+qu++,u._readonly=!1,u.focused=!1,u._isServer=!1,u.stateChanges=new ml.Subject,u.controlType="mat-input",u.placeholder="",u._neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(function(e){return i().has(e)}),u._inputValueAccessor=s||u._elementRef.nativeElement,u._previousNativeValue=u.value,u.id=u.id,n.IOS&&t.nativeElement.addEventListener("keyup",function(e){var t=e.target;t.value||t.selectionStart||t.selectionEnd||(t.setSelectionRange(1,1),t.setSelectionRange(0,0))}),u._isServer=!u._platform.isBrowser,u}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"disabled",{get:function(){return this.ngControl?this.ngControl.disabled:this._disabled},set:function(e){this._disabled=c(e),this.focused&&(this.focused=!1,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},set:function(e){this._id=e||this._uid},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"required",{get:function(){return this._required},set:function(e){this._required=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"type",{get:function(){return this._type},set:function(e){this._type=e||"text",this._validateType(),!this._isTextarea()&&i().has(this._type)&&(this._elementRef.nativeElement.type=this._type)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._inputValueAccessor.value},set:function(e){e!==this.value&&(this._inputValueAccessor.value=e,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"readonly",{get:function(){return this._readonly},set:function(e){this._readonly=c(e)},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(){this.stateChanges.next()},t.prototype.ngOnDestroy=function(){this.stateChanges.complete()},t.prototype.ngDoCheck=function(){this.ngControl?this.updateErrorState():this._dirtyCheckNativeValue()},t.prototype.focus=function(){this._elementRef.nativeElement.focus()},t.prototype._focusChanged=function(e){e===this.focused||this.readonly||(this.focused=e,this.stateChanges.next())},t.prototype._onInput=function(){},t.prototype._dirtyCheckNativeValue=function(){var e=this.value;this._previousNativeValue!==e&&(this._previousNativeValue=e,this.stateChanges.next())},t.prototype._validateType=function(){if(Wu.indexOf(this._type)>-1)throw function(e){return Error('Input type "'+e+"\" isn't supported by matInput.")}(this._type)},t.prototype._isNeverEmpty=function(){return this._neverEmptyInputTypes.indexOf(this._type)>-1},t.prototype._isBadInput=function(){var e=this._elementRef.nativeElement.validity;return e&&e.badInput},t.prototype._isTextarea=function(){var e=this._elementRef.nativeElement,t=this._platform.isBrowser?e.nodeName:e.name;return!!t&&"textarea"===t.toLowerCase()},Object.defineProperty(t.prototype,"empty",{get:function(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"shouldLabelFloat",{get:function(){return this.focused||!this.empty},enumerable:!0,configurable:!0}),t.prototype.setDescribedByIds=function(e){this._ariaDescribedby=e.join(" ")},t.prototype.onContainerClick=function(){this.focus()},t}(function(e){return function(e){function t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.apply(this,t)||this;return r.errorState=!1,r.stateChanges=new ml.Subject,r}return Object(bl.__extends)(t,e),t.prototype.updateErrorState=function(){var e=this.errorState,t=(this.errorStateMatcher||this._defaultErrorStateMatcher).isErrorState(this.ngControl?this.ngControl.control:null,this._parentFormGroup||this._parentForm);t!==e&&(this.errorState=t,this.stateChanges.next())},t}(function(e,t,n,r){this._defaultErrorStateMatcher=e,this._parentForm=t,this._parentFormGroup=n,this.ngControl=r})}()),Gu=function(){},Ku=function(){return function(){this.changes=new ml.Subject,this.calendarLabel="Calendar",this.openCalendarLabel="Open calendar",this.prevMonthLabel="Previous month",this.nextMonthLabel="Next month",this.prevYearLabel="Previous year",this.nextYearLabel="Next year",this.switchToMonthViewLabel="Change to month view",this.switchToYearViewLabel="Change to year view"}}(),$u=function(e,t,n,r){this.value=e,this.displayValue=t,this.ariaLabel=n,this.enabled=r},Zu=function(){function e(){this.numCols=7,this.allowDisabledSelection=!1,this.activeCell=0,this.cellAspectRatio=1,this.selectedValueChange=new al.EventEmitter}return e.prototype._cellClicked=function(e){(this.allowDisabledSelection||e.enabled)&&this.selectedValueChange.emit(e.value)},Object.defineProperty(e.prototype,"_firstRowOffset",{get:function(){return this.rows&&this.rows.length&&this.rows[0].length?this.numCols-this.rows[0].length:0},enumerable:!0,configurable:!0}),e.prototype._isActiveCell=function(e,t){var n=e*this.numCols+t;return e&&(n-=this._firstRowOffset),n==this.activeCell},e}(),Qu=function(){function e(e,t,n){if(this._dateAdapter=e,this._dateFormats=t,this._changeDetectorRef=n,this.selectedChange=new al.EventEmitter,this._userSelection=new al.EventEmitter,!this._dateAdapter)throw Y("DateAdapter");if(!this._dateFormats)throw Y("MAT_DATE_FORMATS");var r=this._dateAdapter.getFirstDayOfWeek(),i=this._dateAdapter.getDayOfWeekNames("narrow"),o=this._dateAdapter.getDayOfWeekNames("long").map(function(e,t){return{long:e,narrow:i[t]}});this._weekdays=o.slice(r).concat(o.slice(0,r)),this._activeDate=this._dateAdapter.today()}return Object.defineProperty(e.prototype,"activeDate",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate;this._activeDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today(),this._hasSameMonthAndYear(t,this._activeDate)||this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedDate=this._getDateInCurrentMonth(this._selected)},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._init()},e.prototype._dateSelected=function(e){if(this._selectedDate!=e){var t=this._dateAdapter.getYear(this.activeDate),n=this._dateAdapter.getMonth(this.activeDate),r=this._dateAdapter.createDate(t,n,e);this.selectedChange.emit(r)}this._userSelection.emit()},e.prototype._init=function(){this._selectedDate=this._getDateInCurrentMonth(this.selected),this._todayDate=this._getDateInCurrentMonth(this._dateAdapter.today()),this._monthLabel=this._dateAdapter.getMonthNames("short")[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();var e=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),this._dateAdapter.getMonth(this.activeDate),1);this._firstWeekOffset=(7+this._dateAdapter.getDayOfWeek(e)-this._dateAdapter.getFirstDayOfWeek())%7,this._createWeekCells(),this._changeDetectorRef.markForCheck()},e.prototype._createWeekCells=function(){var e=this._dateAdapter.getNumDaysInMonth(this.activeDate),t=this._dateAdapter.getDateNames();this._weeks=[[]];for(var n=0,r=this._firstWeekOffset;n<e;n++,r++){7==r&&(this._weeks.push([]),r=0);var i=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),this._dateAdapter.getMonth(this.activeDate),n+1),o=!this.dateFilter||this.dateFilter(i),l=this._dateAdapter.format(i,this._dateFormats.display.dateA11yLabel);this._weeks[this._weeks.length-1].push(new $u(n+1,t[n],l,o))}},e.prototype._getDateInCurrentMonth=function(e){return e&&this._hasSameMonthAndYear(e,this.activeDate)?this._dateAdapter.getDate(e):null},e.prototype._hasSameMonthAndYear=function(e,t){return!(!e||!t||this._dateAdapter.getMonth(e)!=this._dateAdapter.getMonth(t)||this._dateAdapter.getYear(e)!=this._dateAdapter.getYear(t))},e.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},e}(),Yu=function(){function e(e,t,n){if(this._dateAdapter=e,this._dateFormats=t,this._changeDetectorRef=n,this.selectedChange=new al.EventEmitter,!this._dateAdapter)throw Y("DateAdapter");if(!this._dateFormats)throw Y("MAT_DATE_FORMATS");this._activeDate=this._dateAdapter.today()}return Object.defineProperty(e.prototype,"activeDate",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate;this._activeDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today(),this._dateAdapter.getYear(t)!=this._dateAdapter.getYear(this._activeDate)&&this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedMonth=this._getMonthInCurrentYear(this._selected)},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._init()},e.prototype._monthSelected=function(e){var t=this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1));this.selectedChange.emit(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,Math.min(this._dateAdapter.getDate(this.activeDate),t)))},e.prototype._init=function(){var e=this;this._selectedMonth=this._getMonthInCurrentYear(this.selected),this._todayMonth=this._getMonthInCurrentYear(this._dateAdapter.today()),this._yearLabel=this._dateAdapter.getYearName(this.activeDate);var t=this._dateAdapter.getMonthNames("short");this._months=[[0,1,2,3],[4,5,6,7],[8,9,10,11]].map(function(n){return n.map(function(n){return e._createCellForMonth(n,t[n])})}),this._changeDetectorRef.markForCheck()},e.prototype._getMonthInCurrentYear=function(e){return e&&this._dateAdapter.getYear(e)==this._dateAdapter.getYear(this.activeDate)?this._dateAdapter.getMonth(e):null},e.prototype._createCellForMonth=function(e,t){var n=this._dateAdapter.format(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1),this._dateFormats.display.monthYearA11yLabel);return new $u(e,t.toLocaleUpperCase(),n,this._isMonthEnabled(e))},e.prototype._isMonthEnabled=function(e){if(!this.dateFilter)return!0;for(var t=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1);this._dateAdapter.getMonth(t)==e;t=this._dateAdapter.addCalendarDays(t,1))if(this.dateFilter(t))return!0;return!1},e.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},e}(),Xu=function(){function e(e,t,n,r,i,o){var l=this;if(this._elementRef=e,this._intl=t,this._ngZone=n,this._dateAdapter=r,this._dateFormats=i,this.startView="month",this.selectedChange=new al.EventEmitter,this._userSelection=new al.EventEmitter,this._dateFilterForViews=function(e){return!!e&&(!l.dateFilter||l.dateFilter(e))&&(!l.minDate||l._dateAdapter.compareDate(e,l.minDate)>=0)&&(!l.maxDate||l._dateAdapter.compareDate(e,l.maxDate)<=0)},!this._dateAdapter)throw Y("DateAdapter");if(!this._dateFormats)throw Y("MAT_DATE_FORMATS");this._intlChanges=t.changes.subscribe(function(){return o.markForCheck()})}return Object.defineProperty(e.prototype,"startAt",{get:function(){return this._startAt},set:function(e){this._startAt=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minDate",{get:function(){return this._minDate},set:function(e){this._minDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxDate",{get:function(){return this._maxDate},set:function(e){this._maxDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_activeDate",{get:function(){return this._clampedActiveDate},set:function(e){this._clampedActiveDate=this._dateAdapter.clampDate(e,this.minDate,this.maxDate)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_periodButtonText",{get:function(){return this._monthView?this._dateAdapter.format(this._activeDate,this._dateFormats.display.monthYearLabel).toLocaleUpperCase():this._dateAdapter.getYearName(this._activeDate)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_periodButtonLabel",{get:function(){return this._monthView?this._intl.switchToYearViewLabel:this._intl.switchToMonthViewLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_prevButtonLabel",{get:function(){return this._monthView?this._intl.prevMonthLabel:this._intl.prevYearLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_nextButtonLabel",{get:function(){return this._monthView?this._intl.nextMonthLabel:this._intl.nextYearLabel},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._activeDate=this.startAt||this._dateAdapter.today(),this._focusActiveCell(),this._monthView="year"!=this.startView},e.prototype.ngOnDestroy=function(){this._intlChanges.unsubscribe()},e.prototype.ngOnChanges=function(e){var t=e.minDate||e.maxDate||e.dateFilter;if(t&&!t.firstChange){var n=this.monthView||this.yearView;n&&n._init()}},e.prototype._dateSelected=function(e){this._dateAdapter.sameDate(e,this.selected)||this.selectedChange.emit(e)},e.prototype._userSelected=function(){this._userSelection.emit()},e.prototype._monthSelected=function(e){this._activeDate=e,this._monthView=!0},e.prototype._currentPeriodClicked=function(){this._monthView=!this._monthView},e.prototype._previousClicked=function(){this._activeDate=this._monthView?this._dateAdapter.addCalendarMonths(this._activeDate,-1):this._dateAdapter.addCalendarYears(this._activeDate,-1)},e.prototype._nextClicked=function(){this._activeDate=this._monthView?this._dateAdapter.addCalendarMonths(this._activeDate,1):this._dateAdapter.addCalendarYears(this._activeDate,1)},e.prototype._previousEnabled=function(){return!this.minDate||!this.minDate||!this._isSameView(this._activeDate,this.minDate)},e.prototype._nextEnabled=function(){return!this.maxDate||!this._isSameView(this._activeDate,this.maxDate)},e.prototype._handleCalendarBodyKeydown=function(e){this._monthView?this._handleCalendarBodyKeydownInMonthView(e):this._handleCalendarBodyKeydownInYearView(e)},e.prototype._focusActiveCell=function(){var e=this;this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.asObservable().pipe(u(1)).subscribe(function(){e._elementRef.nativeElement.querySelector(".mat-calendar-body-active").focus()})})},e.prototype._isSameView=function(e,t){return this._monthView?this._dateAdapter.getYear(e)==this._dateAdapter.getYear(t)&&this._dateAdapter.getMonth(e)==this._dateAdapter.getMonth(t):this._dateAdapter.getYear(e)==this._dateAdapter.getYear(t)},e.prototype._handleCalendarBodyKeydownInMonthView=function(e){switch(e.keyCode){case 37:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,-1);break;case 39:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,1);break;case 38:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,-7);break;case 40:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,7);break;case 36:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,1-this._dateAdapter.getDate(this._activeDate));break;case 35:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,this._dateAdapter.getNumDaysInMonth(this._activeDate)-this._dateAdapter.getDate(this._activeDate));break;case 33:this._activeDate=e.altKey?this._dateAdapter.addCalendarYears(this._activeDate,-1):this._dateAdapter.addCalendarMonths(this._activeDate,-1);break;case 34:this._activeDate=e.altKey?this._dateAdapter.addCalendarYears(this._activeDate,1):this._dateAdapter.addCalendarMonths(this._activeDate,1);break;case 13:return void(this._dateFilterForViews(this._activeDate)&&(this._dateSelected(this._activeDate),this._userSelected(),e.preventDefault()));default:return}this._focusActiveCell(),e.preventDefault()},e.prototype._handleCalendarBodyKeydownInYearView=function(e){switch(e.keyCode){case 37:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,-1);break;case 39:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,1);break;case 38:this._activeDate=this._prevMonthInSameCol(this._activeDate);break;case 40:this._activeDate=this._nextMonthInSameCol(this._activeDate);break;case 36:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,-this._dateAdapter.getMonth(this._activeDate));break;case 35:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,11-this._dateAdapter.getMonth(this._activeDate));break;case 33:this._activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?-10:-1);break;case 34:this._activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?10:1);break;case 13:this._monthSelected(this._activeDate);break;default:return}this._focusActiveCell(),e.preventDefault()},e.prototype._prevMonthInSameCol=function(e){return this._dateAdapter.addCalendarMonths(e,-4)},e.prototype._nextMonthInSameCol=function(e){return this._dateAdapter.addCalendarMonths(e,4)},e.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},e}(),Ju=new al.InjectionToken("mat-datepicker-scroll-strategy"),ec=function(){function e(){}return e.prototype.ngAfterContentInit=function(){this._calendar._focusActiveCell()},e.prototype._handleKeydown=function(e){27===e.keyCode&&(this.datepicker.close(),e.preventDefault(),e.stopPropagation())},e}(),tc=function(){},nc=al["\u0275crt"]({encapsulation:2,styles:[".mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px}[disabled].mat-button,[disabled].mat-fab,[disabled].mat-icon-button,[disabled].mat-mini-fab,[disabled].mat-raised-button{cursor:default}.cdk-keyboard-focused.mat-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-icon-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-raised-button .mat-button-focus-overlay,.cdk-program-focused.mat-button .mat-button-focus-overlay,.cdk-program-focused.mat-fab .mat-button-focus-overlay,.cdk-program-focused.mat-icon-button .mat-button-focus-overlay,.cdk-program-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-program-focused.mat-raised-button .mat-button-focus-overlay{opacity:1}.mat-button::-moz-focus-inner,.mat-fab::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-mini-fab::-moz-focus-inner,.mat-raised-button::-moz-focus-inner{border:0}.mat-fab,.mat-mini-fab,.mat-raised-button{transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]),.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}[disabled].mat-fab,[disabled].mat-mini-fab,[disabled].mat-raised-button{box-shadow:none}.mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{transition:none;opacity:0}.mat-button:hover .mat-button-focus-overlay{opacity:1}.mat-fab{min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button .mat-icon,.mat-icon-button i{line-height:24px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{color:currentColor}.mat-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*{vertical-align:middle}.mat-button-focus-overlay,.mat-button-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-focus-overlay{background-color:rgba(0,0,0,.12);border-radius:inherit;opacity:0;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}@media screen and (-ms-high-contrast:active){.mat-button-focus-overlay{background-color:rgba(255,255,255,.5)}}.mat-button-ripple-round{border-radius:50%;z-index:1}@media screen and (-ms-high-contrast:active){.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{outline:solid 1px}}"],data:{}}),rc=al["\u0275crt"]({encapsulation:2,styles:[".mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px}[disabled].mat-button,[disabled].mat-fab,[disabled].mat-icon-button,[disabled].mat-mini-fab,[disabled].mat-raised-button{cursor:default}.cdk-keyboard-focused.mat-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-icon-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-raised-button .mat-button-focus-overlay,.cdk-program-focused.mat-button .mat-button-focus-overlay,.cdk-program-focused.mat-fab .mat-button-focus-overlay,.cdk-program-focused.mat-icon-button .mat-button-focus-overlay,.cdk-program-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-program-focused.mat-raised-button .mat-button-focus-overlay{opacity:1}.mat-button::-moz-focus-inner,.mat-fab::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-mini-fab::-moz-focus-inner,.mat-raised-button::-moz-focus-inner{border:0}.mat-fab,.mat-mini-fab,.mat-raised-button{transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]),.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}[disabled].mat-fab,[disabled].mat-mini-fab,[disabled].mat-raised-button{box-shadow:none}.mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{transition:none;opacity:0}.mat-button:hover .mat-button-focus-overlay{opacity:1}.mat-fab{min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button .mat-icon,.mat-icon-button i{line-height:24px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{color:currentColor}.mat-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*{vertical-align:middle}.mat-button-focus-overlay,.mat-button-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-focus-overlay{background-color:rgba(0,0,0,.12);border-radius:inherit;opacity:0;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}@media screen and (-ms-high-contrast:active){.mat-button-focus-overlay{background-color:rgba(255,255,255,.5)}}.mat-button-ripple-round{border-radius:50%;z-index:1}@media screen and (-ms-high-contrast:active){.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{outline:solid 1px}}"],data:{}}),ic=al["\u0275crt"]({encapsulation:2,styles:[".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}"],data:{}}),oc=al["\u0275crt"]({encapsulation:2,styles:[".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:0}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top-width:5px;border-top-style:solid;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.mat-calendar-next-button,.mat-calendar-previous-button{position:relative}.mat-calendar-next-button::after,.mat-calendar-previous-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:'';margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-next-button,[dir=rtl] .mat-calendar-previous-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:'';position:absolute;top:0;left:-8px;right:-8px;height:1px}"],data:{}}),lc=al["\u0275crt"]({encapsulation:2,styles:[".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.71429%;padding-right:4.71429%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:0;cursor:pointer}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-cell-content{position:absolute;top:5%;left:5%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}[dir=rtl] .mat-calendar-body-label{text-align:right}"],data:{}}),ac=al["\u0275crt"]({encapsulation:2,styles:[".mat-datepicker-content{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);display:block}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content-touch{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation:landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation:portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}"],data:{}}),sc=al["\u0275ccf"]("mat-datepicker-content",ec,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-datepicker-content",[["class","mat-datepicker-content"]],[[2,"mat-datepicker-content-touch",null]],[[null,"keydown"]],function(e,t,n){var r=!0;return"keydown"===t&&(r=!1!==al["\u0275nov"](e,1)._handleKeydown(n)&&r),r},ce,ac)),al["\u0275did"](1,1097728,null,0,ec,[],null,null)],null,function(e,t){e(t,0,0,al["\u0275nov"](t,1).datepicker.touchUi)})},{},{},[]),uc=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),cc=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),dc=20,pc=new al.InjectionToken("mat-tooltip-scroll-strategy"),fc=function(){function e(e){this._changeDetectorRef=e,this._visibility="initial",this._closeOnInteraction=!1,this._transformOrigin="bottom",this._onHide=new ml.Subject}return e.prototype.show=function(e,t){var n=this;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId),this._closeOnInteraction=!0,this._position=e,this._showTimeoutId=setTimeout(function(){n._visibility="visible",n._markForCheck()},t)},e.prototype.hide=function(e){var t=this;this._showTimeoutId&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(function(){t._visibility="hidden",t._markForCheck()},e)},e.prototype.afterHidden=function(){return this._onHide.asObservable()},e.prototype.isVisible=function(){return"visible"===this._visibility},e.prototype._setTransformOrigin=function(e){var t="X"==("above"===this._position||"below"===this._position?"Y":"X")?e.overlayX:e.overlayY;if("top"===t||"bottom"===t)this._transformOrigin=t;else if("start"===t)this._transformOrigin="left";else{if("end"!==t)throw function(e){return Error('Tooltip position "'+e+'" is invalid.')}(this._position);this._transformOrigin="right"}},e.prototype._animationStart=function(){this._closeOnInteraction=!1},e.prototype._animationDone=function(e){var t=this,n=e.toState;"hidden"!==n||this.isVisible()||this._onHide.next(),"visible"!==n&&"hidden"!==n||Promise.resolve().then(function(){return t._closeOnInteraction=!0})},e.prototype._handleBodyInteraction=function(){this._closeOnInteraction&&this.hide(0)},e.prototype._markForCheck=function(){this._changeDetectorRef.markForCheck()},e}(),hc=function(){},mc=al["\u0275crt"]({encapsulation:2,styles:[".mat-tooltip-panel{pointer-events:none!important}.mat-tooltip{color:#fff;border-radius:2px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px}@media screen and (-ms-high-contrast:active){.mat-tooltip{outline:solid 1px}}"],data:{animation:[{type:7,name:"state",definitions:[{type:0,name:"initial, void, hidden",styles:{type:6,styles:{transform:"scale(0)"},offset:null},options:void 0},{type:0,name:"visible",styles:{type:6,styles:{transform:"scale(1)"},offset:null},options:void 0},{type:1,expr:"* => visible",animation:{type:4,styles:null,timings:"150ms cubic-bezier(0.0, 0.0, 0.2, 1)"},options:null},{type:1,expr:"* => hidden",animation:{type:4,styles:null,timings:"150ms cubic-bezier(0.4, 0.0, 1, 1)"},options:null}],options:{}}]}}),gc=al["\u0275ccf"]("mat-tooltip-component",fc,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-tooltip-component",[["aria-hidden","true"]],[[4,"zoom",null]],[["body","click"]],function(e,t,n){var r=!0;return"body:click"===t&&(r=!1!==al["\u0275nov"](e,1)._handleBodyInteraction()&&r),r},me,mc)),al["\u0275did"](1,49152,null,0,fc,[al.ChangeDetectorRef],null,null)],null,function(e,t){e(t,0,0,"visible"===al["\u0275nov"](t,1)._visibility?1:null)})},{},{},[]),yc={},vc=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new bc(e,this.project))},e}(),bc=function(e){function t(t,n){e.call(this,t),this.project=n,this.active=0,this.values=[],this.observables=[]}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.values.push(yc),this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var r=e[n];this.add(Object(Dl.a)(this,r,r,n))}}},t.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){var o=this.values,l=this.toRespond?o[n]===yc?--this.toRespond:this.toRespond:0;o[n]=t,0===l&&(this.project?this._tryProject(o):this.destination.next(o.slice()))},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(kl.a),_c=function(e){function t(t,n,r){e.call(this),this.addHandler=t,this.removeHandler=n,this.selector=r}return Object(bl.__extends)(t,e),t.create=function(e,n,r){return new t(e,n,r)},t.prototype._subscribe=function(e){var t=this,n=this.removeHandler,r=this.selector?function(){for(var n=[],r=0;r<arguments.length;r++)n[r-0]=arguments[r];t._callSelector(e,n)}:function(t){e.next(t)},i=this._callAddHandler(r,e);Object(wl.a)(n)&&e.add(new Cl.a(function(){n(r,i)}))},t.prototype._callSelector=function(e,t){try{var n=this.selector.apply(this,t);e.next(n)}catch(t){e.error(t)}},t.prototype._callAddHandler=function(e,t){try{return this.addHandler(e)||null}catch(e){t.error(e)}},t}(gl.a).create,wc=new Map,xc=function(){function e(e){this.platform=e,this._matchMedia=this.platform.isBrowser?window.matchMedia.bind(window):ge}return e.prototype.matchMedia=function(e){return this.platform.WEBKIT&&function(e){if(!wc.has(e))try{var t=document.createElement("style");if(t.setAttribute("type","text/css"),!t.sheet){var n="@media "+e+" {.fx-query-test{ }}";t.appendChild(document.createTextNode(n))}document.getElementsByTagName("head")[0].appendChild(t),wc.set(e,t)}catch(e){console.error(e)}}(e),this._matchMedia(e)},e}(),Cc=function(){function e(e,t){this.mediaMatcher=e,this.zone=t,this._queries=new Map,this._destroySubject=new ml.Subject}return e.prototype.ngOnDestroy=function(){this._destroySubject.next(),this._destroySubject.complete()},e.prototype.isMatched=function(e){var t=this;return p(e).some(function(e){return t._registerQuery(e).mql.matches})},e.prototype.observe=function(e){var t=this;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n=null,r=null;return Object(Pl.a)(e[e.length-1])&&(r=e.pop()),"function"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&Object(Ml.a)(e[0])&&(e=e[0]),new yl.a(e,r).lift(new vc(n))}(p(e).map(function(e){return t._registerQuery(e).observable}),function(e,t){return{matches:!!(e&&e.matches||t&&t.matches)}})},e.prototype._registerQuery=function(e){var t=this;if(this._queries.has(e))return this._queries.get(e);var n=this.mediaMatcher.matchMedia(e),r={observable:_c(function(e){n.addListener(function(n){return t.zone.run(function(){return e(n)})})},function(e){n.removeListener(function(n){return t.zone.run(function(){return e(n)})})}).pipe(Object(Hu.a)(this._destroySubject),P(n),Object(wa.a)(function(e){return{matches:e.matches}})),mql:n};return this._queries.set(e,r),r},e}(),Ec=function(){},Sc=function(){function e(e,t){var n=this;this._overlayRef=t,this._afterClosed=new ml.Subject,this._afterOpened=new ml.Subject,this._onAction=new ml.Subject,this.containerInstance=e,this.onAction().subscribe(function(){return n.dismiss()}),e._onExit.subscribe(function(){return n._finishDismiss()})}return e.prototype.dismiss=function(){this._afterClosed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)},e.prototype.closeWithAction=function(){this._onAction.closed||(this._onAction.next(),this._onAction.complete())},e.prototype._dismissAfter=function(e){var t=this;this._durationTimeoutId=setTimeout(function(){return t.dismiss()},e)},e.prototype._open=function(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())},e.prototype._finishDismiss=function(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterClosed.next(),this._afterClosed.complete()},e.prototype.afterDismissed=function(){return this._afterClosed.asObservable()},e.prototype.afterOpened=function(){return this.containerInstance._onEnter},e.prototype.onAction=function(){return this._onAction.asObservable()},e}(),Oc=new al.InjectionToken("MatSnackBarData"),Tc=function(){this.politeness="assertive",this.announcementMessage="",this.duration=0,this.direction="ltr",this.data=null,this.horizontalPosition="center",this.verticalPosition="bottom"},kc=function(){function e(e,t){this.snackBarRef=e,this.data=t}return e.prototype.action=function(){this.snackBarRef.closeWithAction()},Object.defineProperty(e.prototype,"hasAction",{get:function(){return!!this.data.action},enumerable:!0,configurable:!0}),e}(),Dc=function(e){function t(t,n,r){var i=e.call(this)||this;return i._ngZone=t,i._elementRef=n,i._changeDetectorRef=r,i._destroyed=!1,i._onExit=new ml.Subject,i._onEnter=new ml.Subject,i._animationState="void",i}return Object(bl.__extends)(t,e),t.prototype.attachComponentPortal=function(e){if(this._portalOutlet.hasAttached())throw Error("Attempting to attach snack bar content after content is already attached");var t=this._elementRef.nativeElement;return(this.snackBarConfig.panelClass||this.snackBarConfig.extraClasses)&&(this._setCssClasses(this.snackBarConfig.panelClass),this._setCssClasses(this.snackBarConfig.extraClasses)),"center"===this.snackBarConfig.horizontalPosition&&t.classList.add("mat-snack-bar-center"),"top"===this.snackBarConfig.verticalPosition&&t.classList.add("mat-snack-bar-top"),this._portalOutlet.attachComponentPortal(e)},t.prototype.attachTemplatePortal=function(){throw Error("Not yet implemented")},t.prototype.onAnimationEnd=function(e){var t=e.toState;if(("void"===t&&"void"!==e.fromState||t.startsWith("hidden"))&&this._completeExit(),t.startsWith("visible")){var n=this._onEnter;this._ngZone.run(function(){n.next(),n.complete()})}},t.prototype.enter=function(){this._destroyed||(this._animationState="visible-"+this.snackBarConfig.verticalPosition,this._changeDetectorRef.detectChanges())},t.prototype.exit=function(){return this._animationState="hidden-"+this.snackBarConfig.verticalPosition,this._onExit},t.prototype.ngOnDestroy=function(){this._destroyed=!0,this._completeExit()},t.prototype._completeExit=function(){var e=this;this._ngZone.onMicrotaskEmpty.asObservable().pipe(u(1)).subscribe(function(){e._onExit.next(),e._onExit.complete()})},t.prototype._setCssClasses=function(e){if(e){var t=this._elementRef.nativeElement;Array.isArray(e)?e.forEach(function(e){return t.classList.add(e)}):t.classList.add(e)}},t}(Gl),Ic=function(){function e(e,t,n,r,i){this._overlay=e,this._live=t,this._injector=n,this._breakpointObserver=r,this._parentSnackBar=i,this._snackBarRefAtThisLevel=null}return Object.defineProperty(e.prototype,"_openedSnackBarRef",{get:function(){var e=this._parentSnackBar;return e?e._openedSnackBarRef:this._snackBarRefAtThisLevel},set:function(e){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=e:this._snackBarRefAtThisLevel=e},enumerable:!0,configurable:!0}),e.prototype.openFromComponent=function(e,t){var n=this,r=ye(t),i=this._attach(e,r);return i.afterDismissed().subscribe(function(){n._openedSnackBarRef==i&&(n._openedSnackBarRef=null)}),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(function(){i.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):i.containerInstance.enter(),r.duration&&r.duration>0&&i.afterOpened().subscribe(function(){return i._dismissAfter(r.duration)}),r.announcementMessage&&this._live.announce(r.announcementMessage,r.politeness),this._openedSnackBarRef=i,this._openedSnackBarRef},e.prototype.open=function(e,t,n){void 0===t&&(t="");var r=ye(n);return r.data={message:e,action:t},r.announcementMessage=e,this.openFromComponent(kc,r)},e.prototype.dismiss=function(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()},e.prototype._attachSnackBarContainer=function(e,t){var n=new ql(Dc,t.viewContainerRef),r=e.attach(n);return r.instance.snackBarConfig=t,r.instance},e.prototype._attach=function(e,t){var n=this._createOverlay(t),r=this._attachSnackBarContainer(n,t),i=new Sc(r,n),o=this._createInjector(t,i),l=new ql(e,void 0,o),a=r.attachComponentPortal(l);return i.instance=a.instance,this._breakpointObserver.observe("(max-width: 599px) and (orientation: portrait), (max-width: 959px) and (orientation: landscape)").pipe(Object(Hu.a)(n.detachments().pipe(u(1)))).subscribe(function(e){e.matches?n.overlayElement.classList.add("mat-snack-bar-handset"):n.overlayElement.classList.remove("mat-snack-bar-handset")}),i},e.prototype._createOverlay=function(e){var t=new ra;t.direction=e.direction;var n=this._overlay.position().global(),r="rtl"===e.direction,i="left"===e.horizontalPosition||"start"===e.horizontalPosition&&!r||"end"===e.horizontalPosition&&r,o=!i&&"center"!==e.horizontalPosition;return i?n.left("0"):o?n.right("0"):n.centerHorizontally(),"top"===e.verticalPosition?n.top("0"):n.bottom("0"),t.positionStrategy=n,this._overlay.create(t)},e.prototype._createInjector=function(e,t){var n=e&&e.viewContainerRef&&e.viewContainerRef.injector,r=new WeakMap;return r.set(Sc,t),r.set(Oc,e.data),new Ql(n||this._injector,r)},e}(),Rc=function(){},Mc=al["\u0275crt"]({encapsulation:2,styles:[".mat-snack-bar-container{border-radius:2px;box-sizing:border-box;display:block;margin:24px;max-width:568px;min-width:288px;padding:14px 24px;transform:translateY(100%) translateY(24px)}.mat-snack-bar-container.mat-snack-bar-center{margin:0;transform:translateY(100%)}.mat-snack-bar-container.mat-snack-bar-top{transform:translateY(-100%) translateY(-24px)}.mat-snack-bar-container.mat-snack-bar-top.mat-snack-bar-center{transform:translateY(-100%)}@media screen and (-ms-high-contrast:active){.mat-snack-bar-container{border:solid 1px}}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:0;max-width:inherit;width:100%}"],data:{animation:[{type:7,name:"state",definitions:[{type:0,name:"visible-top, visible-bottom",styles:{type:6,styles:{transform:"translateY(0%)"},offset:null},options:void 0},{type:1,expr:"visible-top => hidden-top, visible-bottom => hidden-bottom",animation:{type:4,styles:null,timings:"195ms cubic-bezier(0.4,0.0,1,1)"},options:null},{type:1,expr:"void => visible-top, void => visible-bottom",animation:{type:4,styles:null,timings:"225ms cubic-bezier(0.0,0.0,0.2,1)"},options:null}],options:{}}]}}),Pc=al["\u0275ccf"]("snack-bar-container",Dc,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"snack-bar-container",[["class","mat-snack-bar-container"],["role","alert"]],[[40,"@state",0]],[["component","@state.done"]],function(e,t,n){var r=!0;return"component:@state.done"===t&&(r=!1!==al["\u0275nov"](e,1).onAnimationEnd(n)&&r),r},be,Mc)),al["\u0275did"](1,180224,null,0,Dc,[al.NgZone,al.ElementRef,al.ChangeDetectorRef],null,null)],null,function(e,t){e(t,0,0,al["\u0275nov"](t,1)._animationState)})},{},{},[]),Nc=al["\u0275crt"]({encapsulation:2,styles:[".mat-simple-snackbar{display:flex;justify-content:space-between;line-height:20px;opacity:1}.mat-simple-snackbar-action{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;background:0 0;flex-shrink:0;margin-left:48px}[dir=rtl] .mat-simple-snackbar-action{margin-right:48px;margin-left:0}"],data:{animation:[{type:7,name:"contentFade",definitions:[{type:1,expr:":enter",animation:[{type:6,styles:{opacity:"0"},offset:null},{type:4,styles:null,timings:"375ms cubic-bezier(0.4,0.0,0.2,1)"}],options:null}],options:{}}]}}),Ac=al["\u0275ccf"]("simple-snack-bar",kc,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"simple-snack-bar",[["class","mat-simple-snackbar"]],[[40,"@contentFade",0]],null,null,we,Nc)),al["\u0275did"](1,49152,null,0,kc,[Sc,Oc],null,null)],null,function(e,t){e(t,0,0,void 0)})},{},{},[]),Lc=function(){},Fc=function(){function e(e,t,n){void 0===e&&(e=!1),void 0===n&&(n=!0);var r=this;this._isMulti=e,this._emitChanges=n,this._selection=new Set,this._deselectedToEmit=[],this._selectedToEmit=[],this.onChange=this._emitChanges?new ml.Subject:null,t&&(e?t.forEach(function(e){return r._markSelected(e)}):this._markSelected(t[0]),this._selectedToEmit.length=0)}return Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected},enumerable:!0,configurable:!0}),e.prototype.select=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._verifyValueAssignment(t),t.forEach(function(t){return e._markSelected(t)}),this._emitChangeEvent()},e.prototype.deselect=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._verifyValueAssignment(t),t.forEach(function(t){return e._unmarkSelected(t)}),this._emitChangeEvent()},e.prototype.toggle=function(e){this.isSelected(e)?this.deselect(e):this.select(e)},e.prototype.clear=function(){this._unmarkAll(),this._emitChangeEvent()},e.prototype.isSelected=function(e){return this._selection.has(e)},e.prototype.isEmpty=function(){return 0===this._selection.size},e.prototype.hasValue=function(){return!this.isEmpty()},e.prototype.sort=function(e){this._isMulti&&this._selected&&this._selected.sort(e)},e.prototype._emitChangeEvent=function(){if(this._selected=null,this._selectedToEmit.length||this._deselectedToEmit.length){var e=new jc(this._selectedToEmit,this._deselectedToEmit);this.onChange&&this.onChange.next(e),this._deselectedToEmit=[],this._selectedToEmit=[]}},e.prototype._markSelected=function(e){this.isSelected(e)||(this._isMulti||this._unmarkAll(),this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))},e.prototype._unmarkSelected=function(e){this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))},e.prototype._unmarkAll=function(){var e=this;this.isEmpty()||this._selection.forEach(function(t){return e._unmarkSelected(t)})},e.prototype._verifyValueAssignment=function(e){if(e.length>1&&!this._isMulti)throw Error("Cannot pass multiple values into SelectionModel with single-value mode.")},e}(),jc=function(e,t){this.added=e,this.removed=t},Vc=function(){function e(){this._listeners=[]}return e.prototype.notify=function(e,t){for(var n=0,r=this._listeners;n<r.length;n++)(0,r[n])(e,t)},e.prototype.listen=function(e){var t=this;return this._listeners.push(e),function(){t._listeners=t._listeners.filter(function(t){return e!==t})}},e}(),zc=n("eoFs"),Bc=function(){function e(e,t){this.template=e,this._differs=t}return e.prototype.ngOnChanges=function(e){var t=e.columns.currentValue||[];this._columnsDiffer||(this._columnsDiffer=this._differs.find(t).create(),this._columnsDiffer.diff(t))},e.prototype.getColumnsDiff=function(){return this._columnsDiffer.diff(this.columns)},e}(),Hc=function(e){function t(t,n){return e.call(this,t,n)||this}return Object(bl.__extends)(t,e),t}(Bc),Wc=function(e){function t(t,n){return e.call(this,t,n)||this}return Object(bl.__extends)(t,e),t}(Bc),qc=function(){function e(t){this._viewContainer=t,e.mostRecentCellOutlet=this}return e.mostRecentCellOutlet=null,e}(),Uc=function(e){this.template=e},Gc=function(e){this.template=e},Kc=function(){function e(){}return Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e,this.cssClassFriendlyName=e.replace(/[^a-z0-9_-]/gi,"-")},enumerable:!0,configurable:!0}),e}(),$c=function(e){this.viewContainer=e},Zc=function(e){this.viewContainer=e},Qc=function(){function e(e,t,n,r){this._differs=e,this._changeDetectorRef=t,this._onDestroy=new ml.Subject,this._data=[],this._columnDefsByName=new Map,this.viewChange=new zc.a({start:0,end:Number.MAX_VALUE}),r||n.nativeElement.setAttribute("role","grid")}return Object.defineProperty(e.prototype,"trackBy",{get:function(){return this._trackByFn},set:function(e){Object(al.isDevMode)()&&null!=e&&"function"!=typeof e&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(e)+"."),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dataSource",{get:function(){return this._dataSource},set:function(e){this._dataSource!==e&&this._switchDataSource(e)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this._dataDiffer=this._differs.find([]).create(this._trackByFn)},e.prototype.ngAfterContentInit=function(){var e=this;if(!this._headerDef&&!this._rowDefs.length)throw Error("Missing definitions for header and row, cannot determine which columns should be rendered.");this._cacheColumnDefsByName(),this._columnDefs.changes.subscribe(function(){return e._cacheColumnDefsByName()}),this._renderHeaderRow()},e.prototype.ngAfterContentChecked=function(){this._renderUpdatedColumns();var e=this._rowDefs.filter(function(e){return!e.when});if(e.length>1)throw Error("There can only be one default row without a when predicate function.");this._defaultRowDef=e[0],this.dataSource&&!this._renderChangeSubscription&&this._observeRenderChanges()},e.prototype.ngOnDestroy=function(){this._rowPlaceholder.viewContainer.clear(),this._headerRowPlaceholder.viewContainer.clear(),this._onDestroy.next(),this._onDestroy.complete(),this.dataSource&&this.dataSource.disconnect(this)},e.prototype._cacheColumnDefsByName=function(){var e=this;this._columnDefsByName.clear(),this._columnDefs.forEach(function(t){if(e._columnDefsByName.has(t.name))throw function(e){return Error('Duplicate column definition name provided: "'+e+'".')}(t.name);e._columnDefsByName.set(t.name,t)})},e.prototype._renderUpdatedColumns=function(){var e=this;this._rowDefs.forEach(function(t){t.getColumnsDiff()&&(e._dataDiffer.diff([]),e._rowPlaceholder.viewContainer.clear(),e._renderRowChanges())}),this._headerDef.getColumnsDiff()&&(this._headerRowPlaceholder.viewContainer.clear(),this._renderHeaderRow())},e.prototype._switchDataSource=function(e){this._data=[],this.dataSource&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),e||this._rowPlaceholder.viewContainer.clear(),this._dataSource=e},e.prototype._observeRenderChanges=function(){var e=this;this._renderChangeSubscription=this.dataSource.connect(this).pipe(Object(Hu.a)(this._onDestroy)).subscribe(function(t){e._data=t,e._renderRowChanges()})},e.prototype._renderHeaderRow=function(){var e=this._getHeaderCellTemplatesForRow(this._headerDef);e.length&&(this._headerRowPlaceholder.viewContainer.createEmbeddedView(this._headerDef.template,{cells:e}),e.forEach(function(e){qc.mostRecentCellOutlet&&qc.mostRecentCellOutlet._viewContainer.createEmbeddedView(e.template,{})}),this._changeDetectorRef.markForCheck())},e.prototype._renderRowChanges=function(){var e=this,t=this._dataDiffer.diff(this._data);if(t){var n=this._rowPlaceholder.viewContainer;t.forEachOperation(function(t,r,i){if(null==t.previousIndex)e._insertRow(t.item,i);else if(null==i)n.remove(r);else{var o=n.get(r);n.move(o,i)}}),this._updateRowIndexContext(),t.forEachIdentityChange(function(e){n.get(e.currentIndex).context.$implicit=e.item})}},e.prototype._getRowDef=function(e,t){if(1==this._rowDefs.length)return this._rowDefs.first;var n=this._rowDefs.find(function(n){return n.when&&n.when(t,e)})||this._defaultRowDef;if(!n)throw Error("Could not find a matching row definition for the provided row data.");return n},e.prototype._insertRow=function(e,t){var n=this._getRowDef(e,t),r={$implicit:e};this._rowPlaceholder.viewContainer.createEmbeddedView(n.template,r,t),this._getCellTemplatesForRow(n).forEach(function(e){qc.mostRecentCellOutlet&&qc.mostRecentCellOutlet._viewContainer.createEmbeddedView(e.template,r)}),this._changeDetectorRef.markForCheck()},e.prototype._updateRowIndexContext=function(){for(var e=this._rowPlaceholder.viewContainer,t=0,n=e.length;t<n;t++){var r=e.get(t);r.context.index=t,r.context.count=n,r.context.first=0===t,r.context.last=t===n-1,r.context.even=t%2==0,r.context.odd=!r.context.even}},e.prototype._getHeaderCellTemplatesForRow=function(e){var t=this;return e.columns?e.columns.map(function(e){var n=t._columnDefsByName.get(e);if(!n)throw Ce(e);return n.headerCell}):[]},e.prototype._getCellTemplatesForRow=function(e){var t=this;return e.columns?e.columns.map(function(e){var n=t._columnDefsByName.get(e);if(!n)throw Ce(e);return n.cell}):[]},e}(),Yc=function(){},Xc=(n("3m71"),function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Qc)),Jc=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Uc),ed=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Gc),td=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Kc),nd=function(e){function t(t,n){var r=e.call(this,t,n)||this;return n.nativeElement.classList.add("mat-column-"+t.cssClassFriendlyName),r}return Object(bl.__extends)(t,e),t}(function(e,t){t.nativeElement.classList.add("cdk-column-"+e.cssClassFriendlyName)}),rd=function(e){function t(t,n){var r=e.call(this,t,n)||this;return n.nativeElement.classList.add("mat-column-"+t.cssClassFriendlyName),r}return Object(bl.__extends)(t,e),t}(function(e,t){t.nativeElement.classList.add("cdk-column-"+e.cssClassFriendlyName)}),id=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Hc),od=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Wc),ld=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(function(){}),ad=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(function(){}),sd=function(){},ud=al["\u0275crt"]({encapsulation:2,styles:[".mat-table{display:block}.mat-header-row,.mat-row{display:flex;border-bottom-width:1px;border-bottom-style:solid;align-items:center;min-height:48px;padding:0 24px}.mat-cell,.mat-header-cell{flex:1;overflow:hidden;word-wrap:break-word}"],data:{}}),cd=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),dd=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),pd=function(){},fd=function(){this.align="start"},hd=function(){},md=function(){},gd=al["\u0275crt"]({encapsulation:2,styles:[".mat-card{transition:box-shadow 280ms cubic-bezier(.4,0,.2,1);display:block;position:relative;padding:24px;border-radius:2px}.mat-card:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}@media screen and (-ms-high-contrast:active){.mat-card{outline:solid 1px}}.mat-card-flat{box-shadow:none}.mat-card-actions,.mat-card-content,.mat-card-subtitle,.mat-card-title{display:block;margin-bottom:16px}.mat-card-actions{margin-left:-16px;margin-right:-16px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 48px);margin:0 -24px 16px -24px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-footer{display:block;margin:0 -24px -24px -24px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button{margin:0 4px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header-text{margin:0 8px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0}.mat-card-lg-image,.mat-card-md-image,.mat-card-sm-image{margin:-8px 0}.mat-card-title-group{display:flex;justify-content:space-between;margin:0 -8px}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}@media (max-width:600px){.mat-card{padding:24px 16px}.mat-card-actions{margin-left:-8px;margin-right:-8px}.mat-card-image{width:calc(100% + 32px);margin:16px -16px}.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}.mat-card-header{margin:-8px 0 0 0}.mat-card-footer{margin-left:-16px;margin-right:-16px}}.mat-card-content>:first-child,.mat-card>:first-child{margin-top:0}.mat-card-content>:last-child:not(.mat-card-footer),.mat-card>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-24px}.mat-card>.mat-card-actions:last-child{margin-bottom:-16px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child{margin-left:0;margin-right:0}.mat-card-subtitle:not(:first-child),.mat-card-title:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}"],data:{}}),yd=function(e){function t(t,n){var r=e.call(this,t)||this;return r._platform=n,r}return Object(bl.__extends)(t,e),t.prototype.ngAfterViewInit=function(){var e=this;Object(al.isDevMode)()&&this._platform.isBrowser&&(this._checkToolbarMixedModes(),this._toolbarRows.changes.subscribe(function(){return e._checkToolbarMixedModes()}))},t.prototype._checkToolbarMixedModes=function(){this._toolbarRows.length&&[].slice.call(this._elementRef.nativeElement.childNodes).filter(function(e){return!(e.classList&&e.classList.contains("mat-toolbar-row"))}).filter(function(e){return e.nodeType!==Node.COMMENT_NODE}).some(function(e){return e.textContent.trim()})&&function(){throw Error("MatToolbar: Attempting to combine different toolbar modes. Either specify multiple `<mat-toolbar-row>` elements explicitly or just place content inside of a `<mat-toolbar>` for a single row.")}()},t}(I(function(e){this._elementRef=e})),vd=function(){},bd=al["\u0275crt"]({encapsulation:2,styles:[".mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media (max-width:600px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}"],data:{}}),_d=n("oiK7"),wd=function(){function e(){this.change=new al.EventEmitter,this.focus=new al.EventEmitter,this.blur=new al.EventEmitter,this.instance=null,this._value="",this.codemirrorMetadataConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0,autofocus:!0},_d.defineMode("asterix",function(){var e=["drop","dataverse","dataset","if","exists","create","use","type","as","closed","primary","key","hints","cardinality","index","on","btree","rtree","keyword","for","in","Metadata","Dataset","return","Index","load","using","localfs","path","format","from","in","with","group","by","select","let","where","order","asc","desc","limit","keeping","offset","distinct","or","and","boolean","tinyint","smallint","integer","bigint","float","double","string","binary","hex","base64","point","line","rectangle","circle","polygon","date","time","datetime","duration","interval","uuid","null","missing","DROP","DATAVERSE","IF","EXISTS","CREATE","USE","TYPE","AS","DATASET","PRIMARY","KEY","INDEX","SELECT","VALUE","INSERT","INTO","FROM","WHERE","AND","SOME","IN","SATISFIES","IS","UNKNOWN","NOT","EVERY","GROUP","BY","ORDER","DESC","LIMIT","OR","SET","DELETE","LOAD","USING"],t=/[$][a-zA-Z]+(\d*)/,n=/[.](\S)*/,r=/["].*["]/,i=/['].*[']/;return{startState:function(){return{inString:!1}},token:function(o,l){if(void 0==l.newLine&&(l.newLine=!0),o.match(t))return"variable";if(o.match(n))return"dot-variable";if(o.match(r))return"string";if(o.match(i))return"string";for(var a in e)if(l.newLine&&o.match(e[a]))return"keyword";return l.newLine=" "===o.peek()||null===o.peek(),o.next(),null}}})}return Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){e!==this._value&&(this._value=e,this.onChange(e))},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){},e.prototype.ngAfterViewInit=function(){this.config=this.config||{},this.codemirrorInit(this.config)},e.prototype.codemirrorInit=function(e){var t=this;this.instance=_d.fromTextArea(this.hostMetadata.nativeElement,this.codemirrorMetadataConfig),this.instance.setSize("100%","100px"),this.instance.on("change",function(){t.updateValue(t.instance.getValue())}),this.instance.on("focus",function(){t.focus.emit()}),this.instance.on("blur",function(){t.blur.emit()})},e.prototype.updateValue=function(e){this.value=e,this.onTouched(),this.change.emit(e)},e.prototype.writeValue=function(e){this._value=e||"",this.instance&&this.instance.setValue(this._value)},e.prototype.onChange=function(e){},e.prototype.onTouched=function(){},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e}(),xd=al["\u0275crt"]({encapsulation:0,styles:[[".textarea-metadata[_ngcontent-%COMP%]{background-color:red!important;border:1px solid #000!important;padding:0;margin:0}codemirror-metadata[_ngcontent-%COMP%]{border:1px solid #eee;height:auto;background-color:blue!important;padding:0;margin:0}"]],data:{}}),Cd="[Query] Execute SQL++ Query",Ed="[Query] Execute SQL++ Query Success",Sd="[Query] Execute SQL++ Query Fail",Od="[Query] Execute Metadata SQL++ Query",Td="[Query] Execute Metadata SQL++ Query Success",kd="[Query] Execute Metadata SQL++ Query Fail",Dd=function(){return function(e){this.payload=e,this.type=Cd}}(),Id=function(){return function(e){this.payload=e,this.type=Ed}}(),Rd=function(){return function(e){this.payload=e,this.type=Sd}}(),Md=function(){return function(e){this.payload=e,this.type=Od}}(),Pd=function(){return function(e){this.payload=e,this.type=Td}}(),Nd=function(){return function(e){this.payload=e,this.type=kd}}(),Ad="[Dataverse Collection] Select Dataverses",Ld="[Dataverse Collection] Select Dataverses Success",Fd="[Dataverse Collection] Create Dataverse",jd="[Dataverse Collection] Create Dataverse Success",Vd="[Dataverse Collection] Create Dataverse Fail",zd="[Dataverse Collection] Drop Dataverses",Bd="[Dataverse Collection] Drop Dataverses Success",Hd="[Dataverse Collection] Drop Dataverses Fail",Wd=function(){return function(e){this.payload=e,this.type=Ad}}(),qd=function(){return function(e){this.payload=e,this.type=Ld}}(),Ud=function(e){this.payload=e,this.type="[Dataverse Collection] Select Dataverses Fail"},Gd=function(){return function(e){this.payload=e,this.type=Fd}}(),Kd=function(){return function(e){this.payload=e,this.type=jd}}(),$d=function(){return function(e){this.payload=e,this.type=Vd}}(),Zd=function(){return function(e){this.payload=e,this.type=zd}}(),Qd=function(){return function(e){this.payload=e,this.type=Bd}}(),Yd=function(){return function(e){this.payload=e,this.type=Hd}}(),Xd="[Dataset Collection] Select Dataset",Jd="[Dataset Collection] Select Dataset Success",ep="[Dataset Collection] Create Dataset",tp="[Dataset Collection] Create Dataset Success",np="[Dataset Collection] Create Dataset Fail",rp="[Dataset Collection] Drop Dataset",ip="[Dataset Collection] Drop Dataset Success",op="[Dataset Collection] Drop Dataset Fail",lp="[Dataset Collection] Guide Select Dataset",ap=function(){return function(e){this.payload=e,this.type=lp}}(),sp=function(){return function(e){this.payload=e,this.type=Xd}}(),up=function(){return function(e){this.payload=e,this.type=Jd}}(),cp=function(e){this.payload=e,this.type="[Dataset Collection] Select Dataset Fail"},dp=function(){return function(e){this.payload=e,this.type=ep}}(),pp=function(){return function(e){this.payload=e,this.type=tp}}(),fp=function(){return function(e){this.payload=e,this.type=np}}(),hp=function(){return function(e){this.payload=e,this.type=rp}}(),mp=function(){return function(e){this.payload=e,this.type=ip}}(),gp=function(){return function(e){this.payload=e,this.type=op}}(),yp="[Datatype Collection] Select Datatypes",vp="[Datatype Collection] Select Datatypes Success",bp="[Datatype Collection] Create Datatypes",_p="[Datatype Collection] Create Datatypes Success",wp="[Datatype Collection] Create Datatypes Fail",xp="[Datatype Collection] Drop Datatypes",Cp="[Datatype Collection] Drop Datatypes Success",Ep="[Datatype Collection] Drop Datatypes Fail",Sp=function(){return function(e){this.payload=e,this.type=yp}}(),Op=function(){return function(e){this.payload=e,this.type=vp}}(),Tp=function(e){this.payload=e,this.type="[Datatype Collection] Select Datatypes Fail"},kp=function(){return function(e){this.payload=e,this.type=bp}}(),Dp=function(){return function(e){this.payload=e,this.type=_p}}(),Ip=function(){return function(e){this.payload=e,this.type=wp}}(),Rp=function(){return function(e){this.payload=e,this.type=xp}}(),Mp=function(){return function(e){this.payload=e,this.type=Cp}}(),Pp=function(){return function(e){this.payload=e,this.type=Ep}}(),Np="[Index Collection] Select Indexes",Ap="[Index Collection] Select Indexes Success",Lp="[Index Collection] Create Index",Fp="[Index Collection] Create Index Success",jp="[Index Collection] Drop Indexes",Vp="[Index Collection] Drop Indexes Success",zp="[Index Collection] Drop Indexes Fail",Bp=function(){return function(e){this.payload=e,this.type=Np}}(),Hp=function(){return function(e){this.payload=e,this.type=Ap}}(),Wp=function(e){this.payload=e,this.type="[Index Collection] Select Indexes Fail"},qp=function(){return function(e){this.payload=e,this.type=Lp}}(),Up=function(){return function(e){this.payload=e,this.type=Fp}}(),Gp=function(e){this.payload=e,this.type="[Index Collection] Create Index Fail"},Kp=function(){return function(e){this.payload=e,this.type=jp}}(),$p=function(){return function(e){this.payload=e,this.type=Vp}}(),Zp=function(){return function(e){this.payload=e,this.type=zp}}(),Qp=function(){function e(e,t){var n=this;this.store=e,this.changeDetector=t,this.dataverses=[],this.datatypes=[],this.datasets=[],this.indexes=[],this.queryMetadataString="",this.errorMessage="",this.codemirrorMetadataConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0,autofocus:!0},this.store.select("sqlMetadataQuery").subscribe(function(e){if(!1===e.success)e.sqlQueryMetadataError.errors&&(n.errorMessage="ERROR: "+e.sqlQueryMetadataError.errors[0].msg,n.changeDetector.detectChanges());else{n.errorMessage="SUCCEED";var t=e.sqlQueryMetadataString;(t=t.toUpperCase()).includes("CREATE DATAVERSE")||t.includes("DROP DATAVERSE")?n.store.dispatch(new Wd("-")):t.includes("CREATE DATASET")||t.includes("DROP DATASET")?n.store.dispatch(new sp("-")):t.includes("CREATE TYPE")||t.includes("DROP TYPE")?n.store.dispatch(new Sp("-")):(t.includes("CREATE INDEX")||t.includes("DROP INDEX"))&&n.store.dispatch(new Bp("-")),n.changeDetector.detectChanges()}})}return e.prototype.getQueryResults=function(e){this.store.dispatch(new Md(e))},e.prototype.executeQuery=function(){this.getQueryResults(this.queryMetadataString.replace(/\n/g," "))},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.cleanUp=function(){this.errorMessage=""},e}(),Yp=n("ADVA"),Xp=al["\u0275crt"]({encapsulation:0,styles:[[".input-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;margin:0 auto;margin-top:8px;height:250px;width:95%;overflow:hidden}.toolbar-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-selector[_ngcontent-%COMP%]{max-height:42px;min-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.content-area[_ngcontent-%COMP%]{position:relative;color:rgba(0,0,0,.87);height:120px;padding:0;margin:16px;overflow:none}.codemirror-container[_ngcontent-%COMP%]{width:100%;height:100%;padding:0;margin:0;font-size:14px;line-height:1.8}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}"]],data:{}});gl.a.prototype.startWith=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return P.apply(void 0,e)(this)},gl.a.merge=Ll.a,gl.a.prototype.map=iu.a,gl.a.prototype.debounceTime=function(e,t){return void 0===t&&(t=Tl),_(e,t)(this)};var Jp=n("6y8h");gl.a.prototype.distinctUntilChanged=Jp.a,gl.a.fromEvent=Sl;var ef=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),tf=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns=["DataverseName","Dataformat","Timestamp","PendingOp"],this.selection=new Fc(!0,[]),this.errorMessage="",this.dvName="",this.selectedRowIndex=-1,this.loaded$=this.store.select("dataverse"),this.store.select(function(e){return e.dataverse.createDataverseName}).subscribe(function(e){n.dvName=e}),this.store.select(function(e){return e.dataverse.dropDataverseName}).subscribe(function(e){n.dvName=e}),this.store.select(function(e){return e.dataverse.createDataverseSuccess}).subscribe(function(e){!0===e&&(n.getDataverse(),n.errorMessage="SUCCEED: CREATED DATAVERSE "+n.dvName+" ")}),this.store.select(function(e){return e.dataverse.createDataverseError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.dataverse.dropDataverseSuccess}).subscribe(function(e){!0===e&&(n.getDataverse(),n.errorMessage="SUCCEED: DROP DATAVERSE "+n.dvName)}),this.store.select(function(e){return e.dataverse.dropDataverseError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getDataverse=function(){this.store.dispatch(new Wd("-"))},e.prototype.ngOnInit=function(){this.dataSource=new of(this.store)},e.prototype.ngAfterViewChecked=function(){},e.prototype.ngAfterViewInit=function(){},e.prototype.openCreateDataverseDialog=function(){this.dialog.open(nf,{width:"420px",data:{name:this.dataverseName}}).afterClosed().subscribe(function(e){})},e.prototype.openDropDataverseDialog=function(){var e=this;this.dialog.open(rf,{width:"420px",data:{name:this.dataverseName}}).afterClosed().subscribe(function(t){e.dataverseName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),nf=function(){function e(e,t,n){this.store=e,this.dialogCreateDvRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new Gd(this.data.dataverseName)),this.dialogCreateDvRef.close(this.data.dataverseName)},e.prototype.onNoClick=function(){this.dialogCreateDvRef.close()},e}(),rf=function(){function e(e,t,n){this.store=e,this.dialogDropDvRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new Zd(this.data.dataverseName)),this.dialogDropDvRef.close(this.data.dataverseName)},e.prototype.onNoClick=function(){this.dialogDropDvRef.close()},e}(),of=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n._filterChange=new zc.a(""),n.dataverse$=n.store.select(function(e){return e.dataverse.dataverses.results}),n}return ef(t,e),Object.defineProperty(t.prototype,"filter",{get:function(){return this._filterChange.value},set:function(e){this._filterChange.next(e)},enumerable:!0,configurable:!0}),t.prototype.connect=function(){return this.dataverse$},t.prototype.disconnect=function(){},t}(Lc),lf=al["\u0275crt"]({encapsulation:2,styles:[".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform:perspective(100px);-ms-transform:none;transform-origin:0 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-empty.mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;height:1px;width:100%}.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.mat-form-field-underline .mat-form-field-ripple{position:absolute;top:0;left:0;width:100%;height:2px;transform-origin:50%;transform:scaleX(.5);visibility:hidden;opacity:0;transition:background-color .3s cubic-bezier(.55,0,.55,.2)}.mat-form-field-invalid:not(.mat-focused) .mat-form-field-underline .mat-form-field-ripple{height:1px}.mat-focused .mat-form-field-underline .mat-form-field-ripple,.mat-form-field-invalid .mat-form-field-underline .mat-form-field-ripple{visibility:visible;opacity:1;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}.mat-form-field-subscript-wrapper{position:absolute;width:100%;overflow:hidden}.mat-form-field-label-wrapper .mat-icon,.mat-form-field-subscript-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}",".mat-input-element{font:inherit;background:0 0;color:currentColor;border:none;outline:0;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element[type=date]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=month]::after,.mat-input-element[type=time]::after,.mat-input-element[type=week]::after{content:' ';white-space:pre;width:1px}.mat-input-element::placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element::-moz-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element::-webkit-input-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element:-ms-input-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent!important;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent!important;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent!important;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent!important;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-autosize{resize:none}"],data:{animation:[{type:7,name:"transitionMessages",definitions:[{type:0,name:"enter",styles:{type:6,styles:{opacity:1,transform:"translateY(0%)"},offset:null},options:void 0},{type:1,expr:"void => enter",animation:[{type:6,styles:{opacity:0,transform:"translateY(-100%)"},offset:null},{type:4,styles:null,timings:"300ms cubic-bezier(0.55, 0, 0.55, 0.2)"}],options:null}],options:{}}]}}),af=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%}.detail[_ngcontent-%COMP%]{width:40%}.dataverses-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.dataverses-card[_ngcontent-%COMP%], .dataverses-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.dataverses-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.dataverses-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.dataverses-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.dataverses-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 75px;flex:0 0 75px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-name-cell[_ngcontent-%COMP%]{-ms-flex:0 0 150px;flex:0 0 150px}.header-dataformat-cell[_ngcontent-%COMP%], .header-name-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;text-transform:uppercase}.header-dataformat-cell[_ngcontent-%COMP%]{-ms-flex:0 0 400px;flex:0 0 400px}.header-timestamp-cell[_ngcontent-%COMP%]{-ms-flex:0 0 250px;flex:0 0 250px;text-transform:uppercase}.dataverse-name-cell[_ngcontent-%COMP%], .header-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0}.dataverse-name-cell[_ngcontent-%COMP%]{-ms-flex:0 0 150px;flex:0 0 150px}.dataverse-dataformat-cell[_ngcontent-%COMP%]{-ms-flex:0 0 400px;flex:0 0 400px}.dataverse-dataformat-cell[_ngcontent-%COMP%], .dataverse-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0}.dataverse-timestamp-cell[_ngcontent-%COMP%]{-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.highlight[_ngcontent-%COMP%]{background:#42a948}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),sf=al["\u0275crt"]({encapsulation:0,styles:[[".dataverse-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),uf=al["\u0275ccf"]("dataverse-create-dialog",nf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataverse-create-dialog",[],null,null,null,Je,sf)),al["\u0275did"](1,49152,null,0,nf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),cf=al["\u0275crt"]({encapsulation:0,styles:[[".dataverse-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),df=al["\u0275ccf"]("dataverse-drop-dialog",rf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataverse-drop-dialog",[],null,null,null,et,cf)),al["\u0275did"](1,49152,null,0,rf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),pf=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ff=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns="['CompactionPolicy', 'DatasetId', 'DatasetName', 'DatasetType', 'DatatypeDataverseName', 'DatatypeName', 'DataverseName', 'GroupName', 'PendingOp', 'Timestamp']",this.errorMessage="",this.dsName="",this.loaded$=this.store.select("dataset"),this.store.select(function(e){return e.dataset.createDatasetName}).subscribe(function(e){n.dsName=e}),this.store.select(function(e){return e.dataset.dropDatasetName}).subscribe(function(e){n.dsName=e}),this.store.select(function(e){return e.dataset.createDatasetSuccess}).subscribe(function(e){!0===e&&(n.getDatasets(),n.errorMessage="SUCCEED: CREATE DATASET "+n.dsName)}),this.store.select(function(e){return e.dataset.createDatasetError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.dataset.dropDatasetSuccess}).subscribe(function(e){!0===e&&(n.getDatasets(),n.errorMessage="SUCCEED: DROP DATASET "+n.dsName)}),this.store.select(function(e){return e.dataset.dropDatasetError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getDatasets=function(){this.store.dispatch(new sp("-"))},e.prototype.ngOnInit=function(){this.dataSource=new gf(this.store)},e.prototype.openCreateDatasetDialog=function(){var e=this;this.dialog.open(hf,{width:"420px",data:{name:this.datasetName}}).afterClosed().subscribe(function(t){e.datasetName=t})},e.prototype.openDropDatasetDialog=function(){var e=this;this.dialog.open(mf,{width:"420px",data:{name:this.datasetName}}).afterClosed().subscribe(function(t){e.datasetName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),hf=function(){function e(e,t,n){this.store=e,this.dialogCreateDsRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new dp(this.data.datasetName)),this.dialogCreateDsRef.close()},e.prototype.onNoClick=function(){this.dialogCreateDsRef.close()},e}(),mf=function(){function e(e,t,n){this.store=e,this.dialogDropDsRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new hp(this.data.datasetName)),this.dialogDropDsRef.close()},e.prototype.onNoClick=function(){this.dialogDropDsRef.close()},e}(),gf=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n.datasets$=n.store.select(function(e){return e.dataset.datasets.results}),n}return pf(t,e),t.prototype.connect=function(){return this.datasets$},t.prototype.disconnect=function(){},t}(Lc),yf=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%;overflow:hidden}.detail[_ngcontent-%COMP%]{width:40%;overflow:hidden}.datasets-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.datasets-card[_ngcontent-%COMP%], .datasets-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.datasets-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.datasets-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.datasets-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.datasets-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-compactionpolicy-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-compactionpolicy-cell[_ngcontent-%COMP%], .header-compactionpolicy-cell[_ngcontent-%COMP%], .header-datasetid-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datasetid-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datasetid-cell[_ngcontent-%COMP%], .header-datasetname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datasetname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datasetname-cell[_ngcontent-%COMP%]{letter-spacing:1px}.dataset-datasetname-cell[_ngcontent-%COMP%], .header-datasettype-cell[_ngcontent-%COMP%]{border:none;font-size:12px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datasettype-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datasettype-cell[_ngcontent-%COMP%]{border:none;font-size:12px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datatypedataversename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datatypedataversename-cell[_ngcontent-%COMP%], .header-datatypedataversename-cell[_ngcontent-%COMP%], .header-datatypename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datatypename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datatypename-cell[_ngcontent-%COMP%], .header-dataversename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-dataversename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-dataversename-cell[_ngcontent-%COMP%], .header-groupname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-groupname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-groupname-cell[_ngcontent-%COMP%], .header-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-timestamp-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),vf=al["\u0275crt"]({encapsulation:0,styles:[[".dataset-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),bf=al["\u0275ccf"]("dataset-create-dialog",hf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataset-create-dialog",[],null,null,null,St,vf)),al["\u0275did"](1,49152,null,0,hf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),_f=al["\u0275crt"]({encapsulation:0,styles:[[".dataset-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),wf=al["\u0275ccf"]("dataset-drop-dialog",mf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataset-drop-dialog",[],null,null,null,Ot,_f)),al["\u0275did"](1,49152,null,0,mf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),xf=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Cf=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns="['datatypeName', 'dataverseName', 'timeStamp']",this.selection=new Fc(!0,[]),this.errorMessage="",this.dtName="",this.loaded$=this.store.select("datatype"),this.store.select(function(e){return e.datatype.createDatatypeName}).subscribe(function(e){n.dtName=e}),this.store.select(function(e){return e.datatype.dropDatatypeName}).subscribe(function(e){n.dtName=e}),this.store.select(function(e){return e.datatype.createDatatypeSuccess}).subscribe(function(e){!0===e&&(n.getDatatypes(),n.errorMessage="SUCCEED: CREATE DATATYPE "+n.dtName)}),this.store.select(function(e){return e.datatype.createDatatypeError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.datatype.dropDatatypeSuccess}).subscribe(function(e){!0===e&&(n.getDatatypes(),n.errorMessage="SUCCEED: DROP DATATYPE "+n.dtName)}),this.store.select(function(e){return e.datatype.dropDatatypeError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getDatatypes=function(){this.store.dispatch(new Sp("-"))},e.prototype.ngOnInit=function(){this.dataSource=new Of(this.store)},e.prototype.openCreateDatatypeDialog=function(){var e=this;this.dialog.open(Ef,{width:"420px",data:{name:this.datatypeName}}).afterClosed().subscribe(function(t){e.datatypeName=t})},e.prototype.openDropDatatypeDialog=function(){var e=this;this.dialog.open(Sf,{width:"420px",data:{name:this.datatypeName}}).afterClosed().subscribe(function(t){e.datatypeName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),Ef=function(){function e(e,t,n){this.store=e,this.dialogCreateDtRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new kp(this.data.datasetName)),this.dialogCreateDtRef.close()},e.prototype.onNoClick=function(){this.dialogCreateDtRef.close()},e}(),Sf=function(){function e(e,t,n){this.store=e,this.dialogDropDtRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new Rp(this.data.datatypeName)),this.dialogDropDtRef.close()},e.prototype.onNoClick=function(){this.dialogDropDtRef.close()},e}(),Of=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n.datatypes$=n.store.select(function(e){return e.datatype.datatypes.results}),n}return xf(t,e),t.prototype.connect=function(){return this.datatypes$},t.prototype.disconnect=function(){},t}(Lc),Tf=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%;overflow:hidden}.detail[_ngcontent-%COMP%]{width:40%;overflow:hidden}.datatypes-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.datatypes-card[_ngcontent-%COMP%], .datatypes-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.datatypes-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.datatypes-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.datatypes-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.datatypes-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.datatypes-toolbar[_ngcontent-%COMP%]{display:block;min-height:56px;height:56px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:1px;font-weight:400;background:rgba(0,0,1,.8)}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 75px;flex:0 0 75px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-datatypename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.datatypes-datatypename-cell[_ngcontent-%COMP%], .header-datatypename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 400px;flex:0 0 400px}.header-dataversename-cell[_ngcontent-%COMP%]{text-align:center;color:rgba(0,0,0,.87);text-transform:uppercase}.datatypes-dataversename-cell[_ngcontent-%COMP%], .header-dataversename-cell[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-timestamp-cell[_ngcontent-%COMP%]{text-transform:uppercase}.datatypes-timestamp-cell[_ngcontent-%COMP%], .header-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:center;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),kf=al["\u0275crt"]({encapsulation:0,styles:[[".datatype-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Df=al["\u0275ccf"]("datatype-create-dialog",Ef,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"datatype-create-dialog",[],null,null,null,Ft,kf)),al["\u0275did"](1,49152,null,0,Ef,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),If=al["\u0275crt"]({encapsulation:0,styles:[[".datatype-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Rf=al["\u0275ccf"]("datatypes-drop-dialog",Sf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"datatypes-drop-dialog",[],null,null,null,jt,If)),al["\u0275did"](1,49152,null,0,Sf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),Mf=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Pf=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns="['dataverseName', 'datasetName', 'indexName', 'indexStructure', 'isPrimary', 'timestamp', 'pendingOp']",this.errorMessage="",this.idxName="",this.loaded$=this.store.select("index"),this.store.select(function(e){return e.index.createIndexName}).subscribe(function(e){n.idxName=e}),this.store.select(function(e){return e.index.dropIndexName}).subscribe(function(e){n.idxName=e}),this.store.select(function(e){return e.index.createIndexSuccess}).subscribe(function(e){!0===e&&(n.getIndexes(),n.errorMessage="SUCCEED: CREATE INDEX "+n.idxName)}),this.store.select(function(e){return e.index.createIndexError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.index.dropIndexSuccess}).subscribe(function(e){!0===e&&(n.getIndexes(),n.errorMessage="SUCCEED: DROP INDEX "+n.idxName)}),this.store.select(function(e){return e.index.dropIndexError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getIndexes=function(){this.store.dispatch(new Bp("-"))},e.prototype.ngOnInit=function(){this.dataSource=new Lf(this.store)},e.prototype.openCreateIndexDialog=function(){var e=this;this.dialog.open(Nf,{width:"420px",data:{name:this.indexName}}).afterClosed().subscribe(function(t){e.indexName=t})},e.prototype.openDropIndexDialog=function(){var e=this;this.dialog.open(Af,{width:"420px",data:{name:this.indexName}}).afterClosed().subscribe(function(t){e.indexName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),Nf=function(){function e(e,t,n){this.store=e,this.dialogCreateIdxRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new qp(this.data.indexName)),this.dialogCreateIdxRef.close()},e.prototype.onNoClick=function(){this.dialogCreateIdxRef.close()},e}(),Af=function(){function e(e,t,n){this.store=e,this.dialogDropIdxRef=t,this.data=n}return e.prototype.onClick=function(){console.log(this.data.indexName),this.store.dispatch(new Kp(this.data.indexName)),this.dialogDropIdxRef.close()},e.prototype.onNoClick=function(){this.dialogDropIdxRef.close()},e}(),Lf=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n.indexes$=n.store.select(function(e){return e.index.indexes.results}),n}return Mf(t,e),t.prototype.connect=function(){return this.indexes$},t.prototype.disconnect=function(){},t}(Lc),Ff=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%}.detail[_ngcontent-%COMP%]{width:40%}.indexes-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.indexes-card[_ngcontent-%COMP%], .indexes-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.indexes-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.indexes-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.indexes-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.indexes-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 75px;flex:0 0 75px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-dataversename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-datasetname-cell[_ngcontent-%COMP%], .header-dataversename-cell[_ngcontent-%COMP%], .indexes-dataversename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-datasetname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-indexname-cell[_ngcontent-%COMP%], .indexes-datasetname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-indexname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.indexes-indexname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-indexestructure-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-indexestructure-cell[_ngcontent-%COMP%], .header-isprimary-cell[_ngcontent-%COMP%], .indexes-indexstructure-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:center;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-isprimary-cell[_ngcontent-%COMP%]{text-transform:uppercase}.indexes-isprimary-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:center;color:rgba(0,0,0,.87);-webkit-box-flex:0}.header-timestamp-cell[_ngcontent-%COMP%], .indexes-isprimary-cell[_ngcontent-%COMP%], .indexes-timestamp-cell[_ngcontent-%COMP%]{-ms-flex:0 0 150px;flex:0 0 150px}.header-groupname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-groupname-cell[_ngcontent-%COMP%], .indexes-groupname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-timestamp-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-timestamp-cell[_ngcontent-%COMP%], .indexes-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),jf=al["\u0275crt"]({encapsulation:0,styles:[[".index-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Vf=al["\u0275ccf"]("index-create-dialog",Nf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"index-create-dialog",[],null,null,null,rn,jf)),al["\u0275did"](1,49152,null,0,Nf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),zf=al["\u0275crt"]({encapsulation:0,styles:[[".index-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Bf=al["\u0275ccf"]("index-drop-dialog",Af,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"index-drop-dialog",[],null,null,null,on,zf)),al["\u0275did"](1,49152,null,0,Af,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),Hf=function(){},Wf=al["\u0275crt"]({encapsulation:0,styles:[[".awc-navbar[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);overflow:hidden}.awc-navbar[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{text-decoration:none}.awc-navbar-header[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 16px}.awc-navbar-header[_ngcontent-%COMP%] > .mat-button[_ngcontent-%COMP%]:last-child{margin-left:auto}.flex-spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.awc-asterixDB-logo[_ngcontent-%COMP%]{height:26px;margin:0 4px 3px 0;vertical-align:middle}.awc-github-logo[_ngcontent-%COMP%]{height:21px;margin:0 7px 2px 0;vertical-align:middle}.awc-navbar-link[_ngcontent-%COMP%]{text-decoration:inherit;-webkit-box-flex:1;-ms-flex:1;flex:1}"]],data:{}}),qf=function(){function e(){}return e.prototype.create=function(e){return"undefined"==typeof MutationObserver?null:new MutationObserver(e)},e}(),Uf=function(){function e(e,t,n){this._mutationObserverFactory=e,this._elementRef=t,this._ngZone=n,this.event=new al.EventEmitter,this._debouncer=new ml.Subject}return e.prototype.ngAfterContentInit=function(){var e=this;this.debounce>0?this._ngZone.runOutsideAngular(function(){e._debouncer.pipe(_(e.debounce)).subscribe(function(t){return e.event.emit(t)})}):this._debouncer.subscribe(function(t){return e.event.emit(t)}),this._observer=this._ngZone.runOutsideAngular(function(){return e._mutationObserverFactory.create(function(t){e._debouncer.next(t)})}),this._observer&&this._observer.observe(this._elementRef.nativeElement,{characterData:!0,childList:!0,subtree:!0})},e.prototype.ngOnDestroy=function(){this._observer&&this._observer.disconnect(),this._debouncer.complete()},e}(),Gf=function(){},Kf=function(){function e(e,t){this._elementRef=e,this._ngZone=t}return e.prototype.alignToElement=function(e){var t=this;this.show(),"undefined"!=typeof requestAnimationFrame?this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){return t._setStyles(e)})}):this._setStyles(e)},e.prototype.show=function(){this._elementRef.nativeElement.style.visibility="visible"},e.prototype.hide=function(){this._elementRef.nativeElement.style.visibility="hidden"},e.prototype._setStyles=function(e){var t=this._elementRef.nativeElement;t.style.left=e?(e.offsetLeft||0)+"px":"0",t.style.width=e?(e.offsetWidth||0)+"px":"0"},e}(),$f=function(e){function t(t){var n=e.call(this)||this;return n._viewContainerRef=t,n.textLabel="",n._contentPortal=null,n._labelChange=new ml.Subject,n._disableChange=new ml.Subject,n.position=null,n.origin=null,n.isActive=!1,n}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"content",{get:function(){return this._contentPortal},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){e.hasOwnProperty("textLabel")&&this._labelChange.next(),e.hasOwnProperty("disabled")&&this._disableChange.next()},t.prototype.ngOnDestroy=function(){this._disableChange.complete(),this._labelChange.complete()},t.prototype.ngOnInit=function(){this._contentPortal=new Ul(this._content,this._viewContainerRef)},t}(D(function(){})),Zf=function(e){function t(t,n,r){var i=e.call(this,t,n)||this;return i._host=r,i}return Object(bl.__extends)(t,e),t.prototype.ngOnInit=function(){var e=this;this._host._isCenterPosition(this._host._position)&&this.attach(this._host._content),this._centeringSub=this._host._beforeCentering.subscribe(function(t){t&&(e.hasAttached()||e.attach(e._host._content))}),this._leavingSub=this._host._afterLeavingCenter.subscribe(function(){e.detach()})},t.prototype.ngOnDestroy=function(){this._centeringSub&&!this._centeringSub.closed&&this._centeringSub.unsubscribe(),this._leavingSub&&!this._leavingSub.closed&&this._leavingSub.unsubscribe()},t}($l),Qf=function(){function e(e,t){this._elementRef=e,this._dir=t,this._onCentering=new al.EventEmitter,this._beforeCentering=new al.EventEmitter,this._afterLeavingCenter=new al.EventEmitter,this._onCentered=new al.EventEmitter(!0)}return Object.defineProperty(e.prototype,"position",{set:function(e){this._position=e<0?"ltr"==this._getLayoutDirection()?"left":"right":e>0?"ltr"==this._getLayoutDirection()?"right":"left":"center"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"origin",{set:function(e){if(null!=e){var t=this._getLayoutDirection();this._origin="ltr"==t&&e<=0||"rtl"==t&&e>0?"left":"right"}},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){"center"==this._position&&this._origin&&(this._position="left"==this._origin?"left-origin-center":"right-origin-center")},e.prototype._onTranslateTabStarted=function(e){var t=this._isCenterPosition(e.toState);this._beforeCentering.emit(t),t&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)},e.prototype._onTranslateTabComplete=function(e){this._isCenterPosition(e.toState)&&this._isCenterPosition(this._position)&&this._onCentered.emit(),this._isCenterPosition(e.fromState)&&!this._isCenterPosition(this._position)&&this._afterLeavingCenter.emit()},e.prototype._getLayoutDirection=function(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"},e.prototype._isCenterPosition=function(e){return"center"==e||"left-origin-center"==e||"right-origin-center"==e},e}(),Yf=0,Xf=function(e){function t(t,n){var r=e.call(this,t)||this;return r._changeDetectorRef=n,r._indexToSelect=0,r._tabBodyWrapperHeight=0,r._tabsSubscription=Cl.a.EMPTY,r._tabLabelSubscription=Cl.a.EMPTY,r._dynamicHeight=!1,r._selectedIndex=null,r.headerPosition="above",r.selectedIndexChange=new al.EventEmitter,r.focusChange=new al.EventEmitter,r.selectedTabChange=new al.EventEmitter(!0),r.selectChange=r.selectedTabChange,r._groupId=Yf++,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"dynamicHeight",{get:function(){return this._dynamicHeight},set:function(e){this._dynamicHeight=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"_dynamicHeightDeprecated",{get:function(){return this._dynamicHeight},set:function(e){this._dynamicHeight=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){this._indexToSelect=d(e,null)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(e){var t=this._elementRef.nativeElement;t.classList.remove("mat-background-"+this.backgroundColor),e&&t.classList.add("mat-background-"+e),this._backgroundColor=e},enumerable:!0,configurable:!0}),t.prototype.ngAfterContentChecked=function(){var e=this,t=this._indexToSelect=Math.min(this._tabs.length-1,Math.max(this._indexToSelect||0,0));if(this._selectedIndex!=t&&null!=this._selectedIndex){var n=this._createChangeEvent(t);this.selectedTabChange.emit(n),Promise.resolve().then(function(){return e.selectedIndexChange.emit(t)})}this._tabs.forEach(function(n,r){n.position=r-t,n.isActive=r===t,null==e._selectedIndex||0!=n.position||n.origin||(n.origin=t-e._selectedIndex)}),this._selectedIndex!==t&&(this._selectedIndex=t,this._changeDetectorRef.markForCheck())},t.prototype.ngAfterContentInit=function(){var e=this;this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(function(){e._subscribeToTabLabels(),e._changeDetectorRef.markForCheck()})},t.prototype.ngOnDestroy=function(){this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe()},t.prototype._focusChanged=function(e){this.focusChange.emit(this._createChangeEvent(e))},t.prototype._createChangeEvent=function(e){var t=new function(){};return t.index=e,this._tabs&&this._tabs.length&&(t.tab=this._tabs.toArray()[e]),t},t.prototype._subscribeToTabLabels=function(){var e=this;this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=Ll.a.apply(void 0,this._tabs.map(function(e){return e._disableChange}).concat(this._tabs.map(function(e){return e._labelChange}))).subscribe(function(){e._changeDetectorRef.markForCheck()})},t.prototype._getTabLabelId=function(e){return"mat-tab-label-"+this._groupId+"-"+e},t.prototype._getTabContentId=function(e){return"mat-tab-content-"+this._groupId+"-"+e},t.prototype._setTabBodyWrapperHeight=function(e){if(this._dynamicHeight&&this._tabBodyWrapperHeight){var t=this._tabBodyWrapper.nativeElement;t.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(t.style.height=e+"px")}},t.prototype._removeTabBodyWrapperHeight=function(){this._tabBodyWrapperHeight=this._tabBodyWrapper.nativeElement.clientHeight,this._tabBodyWrapper.nativeElement.style.height=""},t.prototype._handleClick=function(e,t,n){e.disabled||(this.selectedIndex=t.focusIndex=n)},t.prototype._getTabIndex=function(e,t){return e.disabled?null:this.selectedIndex===t?0:-1},t}(I(R(function(e){this._elementRef=e}),"primary")),Jf=function(e){function t(t){var n=e.call(this)||this;return n.elementRef=t,n}return Object(bl.__extends)(t,e),t.prototype.focus=function(){this.elementRef.nativeElement.focus()},t.prototype.getOffsetLeft=function(){return this.elementRef.nativeElement.offsetLeft},t.prototype.getOffsetWidth=function(){return this.elementRef.nativeElement.offsetWidth},t}(D(function(){})),eh=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._elementRef=t,o._changeDetectorRef=n,o._viewportRuler=r,o._dir=i,o._focusIndex=0,o._scrollDistance=0,o._selectedIndexChanged=!1,o._realignInkBar=Cl.a.EMPTY,o._showPaginationControls=!1,o._disableScrollAfter=!0,o._disableScrollBefore=!0,o._selectedIndex=0,o.selectFocusedIndex=new al.EventEmitter,o.indexFocused=new al.EventEmitter,o}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){e=d(e),this._selectedIndexChanged=this._selectedIndex!=e,this._selectedIndex=e,this._focusIndex=e},enumerable:!0,configurable:!0}),t.prototype.ngAfterContentChecked=function(){this._tabLabelCount!=this._labelWrappers.length&&(this._updatePagination(),this._tabLabelCount=this._labelWrappers.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())},t.prototype._handleKeydown=function(e){switch(e.keyCode){case 39:this._focusNextTab();break;case 37:this._focusPreviousTab();break;case 13:case 32:this.selectFocusedIndex.emit(this.focusIndex),e.preventDefault()}},t.prototype.ngAfterContentInit=function(){var e=this,t=this._dir?this._dir.change:vl(null),n=this._viewportRuler.change(150),r=function(){e._updatePagination(),e._alignInkBarToSelectedTab()};"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(r):r(),this._realignInkBar=Object(Ll.a)(t,n).subscribe(r)},t.prototype.ngOnDestroy=function(){this._realignInkBar.unsubscribe()},t.prototype._onContentChanges=function(){this._updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()},t.prototype._updatePagination=function(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()},Object.defineProperty(t.prototype,"focusIndex",{get:function(){return this._focusIndex},set:function(e){this._isValidIndex(e)&&this._focusIndex!=e&&(this._focusIndex=e,this.indexFocused.emit(e),this._setTabFocus(e))},enumerable:!0,configurable:!0}),t.prototype._isValidIndex=function(e){if(!this._labelWrappers)return!0;var t=this._labelWrappers?this._labelWrappers.toArray()[e]:null;return!!t&&!t.disabled},t.prototype._setTabFocus=function(e){if(this._showPaginationControls&&this._scrollToLabel(e),this._labelWrappers&&this._labelWrappers.length){this._labelWrappers.toArray()[e].focus();var t=this._tabListContainer.nativeElement,n=this._getLayoutDirection();t.scrollLeft="ltr"==n?0:t.scrollWidth-t.offsetWidth}},t.prototype._moveFocus=function(e){if(this._labelWrappers)for(var t=this._labelWrappers.toArray(),n=this.focusIndex+e;n<t.length&&n>=0;n+=e)if(this._isValidIndex(n))return void(this.focusIndex=n)},t.prototype._focusNextTab=function(){this._moveFocus("ltr"==this._getLayoutDirection()?1:-1)},t.prototype._focusPreviousTab=function(){this._moveFocus("ltr"==this._getLayoutDirection()?-1:1)},t.prototype._getLayoutDirection=function(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"},t.prototype._updateTabScrollPosition=function(){var e=this.scrollDistance,t="ltr"===this._getLayoutDirection()?-e:e;this._tabList.nativeElement.style.transform="translate3d("+t+"px, 0, 0)"},Object.defineProperty(t.prototype,"scrollDistance",{get:function(){return this._scrollDistance},set:function(e){this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),e)),this._scrollDistanceChanged=!0,this._checkScrollingControls()},enumerable:!0,configurable:!0}),t.prototype._scrollHeader=function(e){this.scrollDistance+=("before"==e?-1:1)*this._tabListContainer.nativeElement.offsetWidth/3},t.prototype._scrollToLabel=function(e){var t=this._labelWrappers?this._labelWrappers.toArray()[e]:null;if(t){var n,r,i=this._tabListContainer.nativeElement.offsetWidth;"ltr"==this._getLayoutDirection()?r=(n=t.getOffsetLeft())+t.getOffsetWidth():n=(r=this._tabList.nativeElement.offsetWidth-t.getOffsetLeft())-t.getOffsetWidth();var o=this.scrollDistance,l=this.scrollDistance+i;n<o?this.scrollDistance-=o-n+60:r>l&&(this.scrollDistance+=r-l+60)}},t.prototype._checkPaginationEnabled=function(){var e=this._tabList.nativeElement.scrollWidth>this._elementRef.nativeElement.offsetWidth;e||(this.scrollDistance=0),e!==this._showPaginationControls&&this._changeDetectorRef.markForCheck(),this._showPaginationControls=e},t.prototype._checkScrollingControls=function(){this._disableScrollBefore=0==this.scrollDistance,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck()},t.prototype._getMaxScrollDistance=function(){return this._tabList.nativeElement.scrollWidth-this._tabListContainer.nativeElement.offsetWidth||0},t.prototype._alignInkBarToSelectedTab=function(){var e=this._labelWrappers&&this._labelWrappers.length?this._labelWrappers.toArray()[this.selectedIndex].elementRef.nativeElement:null;this._inkBar.alignToElement(e)},t}(R(function(){})),th=function(){},nh=al["\u0275crt"]({encapsulation:2,styles:[".mat-tab-group{display:flex;flex-direction:column}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:0;opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}@media (max-width:600px){.mat-tab-label{padding:0 12px}}@media (max-width:960px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs] .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height .5s cubic-bezier(.35,0,.25,1)}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}"],data:{}}),rh=al["\u0275crt"]({encapsulation:2,styles:[".mat-tab-body-content{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}"],data:{animation:[{type:7,name:"translateTab",definitions:[{type:0,name:"center, void, left-origin-center, right-origin-center",styles:{type:6,styles:{transform:"none"},offset:null},options:void 0},{type:0,name:"left",styles:{type:6,styles:{transform:"translate3d(-100%, 0, 0)"},offset:null},options:void 0},{type:0,name:"right",styles:{type:6,styles:{transform:"translate3d(100%, 0, 0)"},offset:null},options:void 0},{type:1,expr:"* => left, * => right, left => center, right => center",animation:{type:4,styles:null,timings:"500ms cubic-bezier(0.35, 0, 0.25, 1)"},options:null},{type:1,expr:"void => left-origin-center",animation:[{type:6,styles:{transform:"translate3d(-100%, 0, 0)"},offset:null},{type:4,styles:null,timings:"500ms cubic-bezier(0.35, 0, 0.25, 1)"}],options:null},{type:1,expr:"void => right-origin-center",animation:[{type:6,styles:{transform:"translate3d(100%, 0, 0)"},offset:null},{type:4,styles:null,timings:"500ms cubic-bezier(0.35, 0, 0.25, 1)"}],options:null}],options:{}}]}}),ih=al["\u0275crt"]({encapsulation:2,styles:[".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:0;opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}@media (max-width:600px){.mat-tab-label{min-width:72px}}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:.5s cubic-bezier(.35,0,.25,1)}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.mat-tab-header-pagination{position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-pagination-after,.mat-tab-header-rtl .mat-tab-header-pagination-before{padding-right:4px}.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;content:'';height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list{flex-grow:1;position:relative;transition:transform .5s cubic-bezier(.35,0,.25,1)}.mat-tab-labels{display:flex}"],data:{}}),oh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),lh=n("QhpF"),ah=n("/zAi"),sh=n("H0Ur"),uh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),ch=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),dh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),ph=function(){function e(e,t){this.store=e,this.changeDetector=t,this.nodesAll=[],this.nodesDatasets=[],this.nodesDatatypes=[],this.nodesIndexes=[]}return e.prototype.ngOnInit=function(){var e=this;this.store.select(function(e){return e.metadata.tree}).subscribe(function(t){e.nodesAll=[],e.nodesDatasets=[],e.nodesDatatypes=[],e.nodesIndexes=[];var n=[],r=[],i=[],o={label:"",children:[]};o.label="DATAVERSES",o.children=[];for(var l=0;l<t.length;l++){var a={label:"",children:[]};if(a.label=t[l].DataverseName,o.children.push(a),t[l].Datasets.length){var s={label:"",children:[]};s.label="DATASETS",a.children.push(s);for(var u=0;u<t[l].Datasets.length;u++){var c={label:"",children:[]};if(c.label=t[l].Datasets[u].DatasetName,t[l].Datasets[u].Datatype){var d={label:"",children:[]};if(d.label="Datatype: "+t[l].Datasets[u].Datatype.DatatypeName,t[l].Datasets[u].Datatype.Derived&&t[l].Datasets[u].Datatype.Derived.Record){var p={label:"",leaf:!0,expanded:!0,children:[]};p.label="FIELDS";for(var f=0;f<t[l].Datasets[u].Datatype.Derived.Record.Fields.length;f++){var h={label:"",children:[]};h.label=t[l].Datasets[u].Datatype.Derived.Record.Fields[f].FieldName+": "+t[l].Datasets[u].Datatype.Derived.Record.Fields[f].FieldType,p.children.push(h)}d.children.push(p)}c.children.push(d),d.label=t[l].Datasets[u].Datatype.DatatypeName,r.push(d)}if(t[l].Datasets[u].Indexes.length){var m={label:"",children:[]};for(m.label="INDEXES",f=0;f<t[l].Datasets[u].Indexes.length;f++){var g={label:"",children:[]};g.label=t[l].Datasets[u].Indexes[f].IndexName;var y={label:"",children:[]};if(y.label="isPrimary: "+t[l].Datasets[u].Indexes[f].IsPrimary,g.children.push(y),t[l].Datasets[u].Indexes[f].SearchKey){var v={label:"",children:[]};v.label="SEARCH KEY";for(var b=0;b<t[l].Datasets[u].Indexes[f].SearchKey.length;b++){var _={label:"",children:[]};_.label=t[l].Datasets[u].Indexes[f].SearchKey[b],v.children.push(_)}g.children.push(v),n.push(g)}m.children.push(g)}c.children.push(m),s.children.push(c),i.push(c)}}}}e.nodesAll.push(o);var w={label:"",children:[]};w.label="DATASETS",w.children=i,e.nodesDatasets.push(w);var x={label:"",children:[]};x.label="DATATYPES",x.children=r,e.nodesDatatypes.push(x);var C={label:"",children:[]};C.label="INDEXES",C.children=n,e.nodesIndexes.push(C),e.changeDetector.detectChanges()})},e.prototype.nodeSelectAll=function(e){if(e.node.parent&&"DATASETS"===e.node.parent.label){var t=e.node.label.replace(/-;-/g);this.store.dispatch(new ap(t))}},e.prototype.nodeSelectDataset=function(e){if(e.node.parent&&"DATASETS"===e.node.parent.label){var t=e.node.label.replace(/-;-/g);this.store.dispatch(new ap(t))}},e}(),fh=al["\u0275crt"]({encapsulation:0,styles:[[".metadata-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;margin:0 auto;margin-top:10px;margin-bottom:10px;min-height:150px;box-shadow:none!important;width:92%;overflow:hidden}.example-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.metadata-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.metadata-content-area[_ngcontent-%COMP%]{padding:10px;margin:0}.metadata-tree[_ngcontent-%COMP%]{min-height:30px;font-size:.8rem;font-weight:500}.metadata-dataindexes[_ngcontent-%COMP%], .metadata-datasets[_ngcontent-%COMP%], .metadata-datatypes[_ngcontent-%COMP%]{margin-top:10px;margin-bottom:10px}.metadata-tree.ui-tree[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;border:none!important;background-color:red}.refresh-button[_ngcontent-%COMP%]{float:left;margin-top:5px}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:5px;margin:0}"]],data:{}}),hh=function(){function e(){this.change=new al.EventEmitter,this.focus=new al.EventEmitter,this.blur=new al.EventEmitter,this.instance=null,this._value="",_d.defineMode("asterix",function(){var e=["drop","dataverse","dataset","if","exists","create","use","type","as","closed","primary","key","hints","cardinality","index","on","btree","rtree","keyword","for","in","Metadata","Dataset","return","Index","load","using","localfs","path","format","from","in","with","group","by","select","let","where","order","asc","desc","limit","keeping","offset","distinct","or","and","boolean","tinyint","smallint","integer","bigint","float","double","string","binary","hex","base64","point","line","rectangle","circle","polygon","date","time","datetime","duration","interval","uuid","null","missing","DROP","DATAVERSE","IF","EXISTS","CREATE","USE","TYPE","AS","DATASET","PRIMARY","KEY","INDEX","SELECT","VALUE","INSERT","INTO","FROM","WHERE","AND","SOME","IN","SATISFIES","IS","UNKNOWN","NOT","EVERY","GROUP","BY","ORDER","DESC","LIMIT","OR","SET","DELETE","LOAD","USING"],t=/[$][a-zA-Z]+(\d*)/,n=/[.](\S)*/,r=/["].*["]/,i=/['].*[']/;return{startState:function(){return{inString:!1}},token:function(o,l){if(void 0==l.newLine&&(l.newLine=!0),o.match(t))return"variable";if(o.match(n))return"dot-variable";if(o.match(r))return"string";if(o.match(i))return"string";for(var a in e)if(l.newLine&&o.match(e[a]))return"keyword";return l.newLine=" "===o.peek()||null===o.peek(),o.next(),null}}})}return Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){e!==this._value&&(this._value=e,this.onChange(e))},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){},e.prototype.ngAfterViewInit=function(){this.config=this.config||{},this.codemirrorInit(this.config)},e.prototype.codemirrorInit=function(e){var t=this;this.instance=_d.fromTextArea(this.host.nativeElement,e),this.instance.setValue(this._value),this.instance.setSize(null,90),this.instance.on("change",function(){t.updateValue(t.instance.getValue())}),this.instance.on("focus",function(){t.focus.emit()}),this.instance.on("blur",function(){t.blur.emit()})},e.prototype.updateValue=function(e){this.value=e,this.onTouched(),this.change.emit(e)},e.prototype.writeValue=function(e){this._value=e||"",this.instance&&this.instance.setValue(this._value)},e.prototype.onChange=function(e){},e.prototype.onTouched=function(){},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e}(),mh=al["\u0275crt"]({encapsulation:0,styles:[["code[_ngcontent-%COMP%]{width:100%;height:100%;padding:10%;margin:0;overflow-wrap:break-word;word-break:break-all;background-color:pink}"]],data:{}}),gh=function(){function e(e){var t=this;this.store=e,this.dataverses=[],this.datatypes=[],this.datasets=[],this.indexes=[],this.datasetName="",this.dataverseName="",this.queryString="",this.codemirrorConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0,autofocus:!0},this.guideSelectedDataset$=this.store.select(function(e){return e.dataset.guideSelectsDataset}),this.guideSelectedDataset$.subscribe(function(e){if(e){t.datasetName=e;for(var n=0;n<t.datasets.length;n++)t.datasets[n].DatasetName===t.datasetName&&(t.dataverseName=t.datasets[n].DataverseName);t.queryString="USE "+t.dataverseName+"; SELECT * FROM "+t.datasetName}}),this.dataverses$=this.store.select(function(e){return e.dataverse.dataverses.results}),this.dataverses$.subscribe(function(e){t.dataverses=e}),this.datasets$=this.store.select(function(e){return e.dataset.datasets.results}),this.datasets$.subscribe(function(e){t.datasets=e})}return e.prototype.getQueryResults=function(e){this.store.dispatch(new Dd(e))},e.prototype.onClick=function(){this.getQueryResults(this.queryString.replace(/\n/g," "))},e}(),yh=al["\u0275crt"]({encapsulation:0,styles:[[".input-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;margin:10px;height:200px;width:100%;min-height:150px}.toolbar-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-selector[_ngcontent-%COMP%]{max-height:42px;min-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.content-area[_ngcontent-%COMP%]{color:rgba(0,0,0,.87);padding:0;margin:0;overflow:none}.codemirror-container[_ngcontent-%COMP%]{width:95%;height:98%;padding:0;margin:0 auto;font-size:14px;line-height:1.8;background-color:red}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding-left:5px;margin:0}"]],data:{}}),vh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),bh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),_h=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),wh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),xh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Ch=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Eh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Sh=n("pQo2"),Oh=n("wRXj"),Th=n("Rs3a"),kh=n("4cOY"),Dh=n("P0cP"),Ih=al["\u0275crt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"panelState",definitions:[{type:0,name:"hidden",styles:{type:6,styles:{opacity:0},offset:null},options:void 0},{type:0,name:"visible",styles:{type:6,styles:{opacity:1},offset:null},options:void 0},{type:1,expr:"visible => hidden",animation:{type:4,styles:null,timings:"400ms ease-in"},options:null},{type:1,expr:"hidden => visible",animation:{type:4,styles:null,timings:"400ms ease-out"},options:null}],options:{}}]}}),Rh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Mh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Ph=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Nh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Ah=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Lh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Fh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),jh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Vh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),zh=D(function(){}),Bh=0,Hh=function(){},Wh=function(e){function t(t){var n=e.call(this)||this;return n._changeDetector=t,n._value=null,n._name="mat-button-toggle-group-"+Bh++,n._vertical=!1,n._selected=null,n._controlValueAccessorChangeFn=function(){},n._onTouched=function(){},n.valueChange=new al.EventEmitter,n.change=new al.EventEmitter,n}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e,this._updateButtonToggleNames()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"vertical",{get:function(){return this._vertical},set:function(e){this._vertical=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._value},set:function(e){this._value!=e&&(this._value=e,this.valueChange.emit(e),this._updateSelectedButtonToggleFromValue())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=e,this.value=e?e.value:null,e&&!e.checked&&(e.checked=!0)},enumerable:!0,configurable:!0}),t.prototype._updateButtonToggleNames=function(){var e=this;this._buttonToggles&&this._buttonToggles.forEach(function(t){t.name=e._name})},t.prototype._updateSelectedButtonToggleFromValue=function(){var e=this;if(null!=this._buttonToggles&&(null==this._selected||this._selected.value!=this._value)){var t=this._buttonToggles.filter(function(t){return t.value==e._value})[0];t?this.selected=t:null==this.value&&(this.selected=null,this._buttonToggles.forEach(function(e){e.checked=!1}))}},t.prototype._emitChangeEvent=function(){var e=new Hh;e.source=this._selected,e.value=this._value,this._controlValueAccessorChangeFn(e.value),this.change.emit(e)},t.prototype.writeValue=function(e){this.value=e,this._changeDetector.markForCheck()},t.prototype.registerOnChange=function(e){this._controlValueAccessorChangeFn=e},t.prototype.registerOnTouched=function(e){this._onTouched=e},t.prototype.setDisabledState=function(e){this.disabled=e,this._markButtonTogglesForCheck()},t.prototype._markButtonTogglesForCheck=function(){this._buttonToggles&&this._buttonToggles.forEach(function(e){return e._markForCheck()})},t}(zh),qh=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._vertical=!1,t}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"vertical",{get:function(){return this._vertical},set:function(e){this._vertical=c(e)},enumerable:!0,configurable:!0}),t}(zh),Uh=function(){function e(e,t,n,r,i,o){var l=this;this._changeDetectorRef=n,this._buttonToggleDispatcher=r,this._elementRef=i,this._focusMonitor=o,this.ariaLabel="",this.ariaLabelledby=null,this._checked=!1,this._disabled=!1,this._value=null,this._isSingleSelector=!1,this._removeUniqueSelectionListener=function(){},this.change=new al.EventEmitter,this.buttonToggleGroup=e,this.buttonToggleGroupMultiple=t,this.buttonToggleGroup?(this._removeUniqueSelectionListener=r.listen(function(e,t){e!=l.id&&t==l.name&&(l.checked=!1,l._changeDetectorRef.markForCheck())}),this._type="radio",this.name=this.buttonToggleGroup.name,this._isSingleSelector=!0):(this._type="checkbox",this._isSingleSelector=!1)}return Object.defineProperty(e.prototype,"inputId",{get:function(){return this.id+"-input"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"checked",{get:function(){return this._checked},set:function(e){this._isSingleSelector&&e&&(this._buttonToggleDispatcher.notify(this.id,this.name),this._changeDetectorRef.markForCheck()),this._checked=e,e&&this._isSingleSelector&&this.buttonToggleGroup.value!=this.value&&(this.buttonToggleGroup.selected=this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){this._value!=e&&(null!=this.buttonToggleGroup&&this.checked&&(this.buttonToggleGroup.value=e),this._value=e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled||null!=this.buttonToggleGroup&&this.buttonToggleGroup.disabled||null!=this.buttonToggleGroupMultiple&&this.buttonToggleGroupMultiple.disabled},set:function(e){this._disabled=c(e)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){null==this.id&&(this.id="mat-button-toggle-"+Bh++),this.buttonToggleGroup&&this._value==this.buttonToggleGroup.value&&(this._checked=!0),this._focusMonitor.monitor(this._elementRef.nativeElement,!0)},e.prototype.focus=function(){this._inputElement.nativeElement.focus()},e.prototype._toggle=function(){this.checked=!this.checked},e.prototype._onInputChange=function(e){if(e.stopPropagation(),this._isSingleSelector){var t=this.buttonToggleGroup.selected!=this;this.checked=!0,this.buttonToggleGroup.selected=this,this.buttonToggleGroup._onTouched(),t&&this.buttonToggleGroup._emitChangeEvent()}else this._toggle();this._emitChangeEvent()},e.prototype._onInputClick=function(e){e.stopPropagation()},e.prototype._emitChangeEvent=function(){var e=new Hh;e.source=this,e.value=this._value,this.change.emit(e)},e.prototype.ngOnDestroy=function(){this._removeUniqueSelectionListener()},e.prototype._markForCheck=function(){this._changeDetectorRef.markForCheck()},e}(),Gh=function(){},Kh=al["\u0275crt"]({encapsulation:2,styles:[".mat-button-toggle-group,.mat-button-toggle-standalone{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);position:relative;display:inline-flex;flex-direction:row;border-radius:2px;cursor:pointer;white-space:nowrap;overflow:hidden}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle-disabled .mat-button-toggle-label-content{cursor:default}.mat-button-toggle{white-space:nowrap;position:relative}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay,.mat-button-toggle.cdk-program-focused .mat-button-toggle-focus-overlay{opacity:1}.mat-button-toggle-label-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;line-height:36px;padding:0 16px;cursor:pointer}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{border-radius:inherit;pointer-events:none;opacity:0;top:0;left:0;right:0;bottom:0;position:absolute}"],data:{}}),$h=n("bbdN"),Zh=function(){function e(e,t){var n=this;this.store=e,this.changeDetector=t,this.treeData=[],this.flattenData=[],this.dataColumns=[],this.jsonOutput="",this.selectedOutputView="NONE",this.outputQueryString="",this.toogleExpand="EXPAND TREE",this.codemirrorConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0},this.loaded$=this.store.select(function(e){return e.sqlQuery.loaded}),this.store.select("sqlQuery").subscribe(function(e){if(e.loaded){n.selectedOutputView="TABLE",n.loading=!0,n.data=e.sqlQueryResult.results,n.treeData=[];var t=e.sqlQueryString;if(n.outputQueryString=t.length>150?": "+t.slice(0,150)+" (..)":": "+t,e.sqlQueryResult.results&&e.sqlQueryResult.results.length>0&&n.data[0]){for(var r=0;r<n.data.length;r++)n.treeData.push(n.generateTreeMenu(n.data[r],{label:"["+r+"]",children:[]}));n.loading=!1}if(n.jsonOutput=JSON.stringify(e.sqlQueryResult.results,null,2),n.data&&n.data.length>0){n.collapseAll(),n.dataColumns=[];var i=Object.keys(n.data[0]),o=i[0];if(n.data[0][o]instanceof Object){var l=Object.keys(n.data[0][o]);for(r=0;r<l.length;r++)n.dataColumns.push("object"==typeof n.data[0][o][l[r]]?{field:"nestedString"+r,header:l[r]}:{field:l[r],header:l[r]})}else for(r=0;r<i.length;r++)n.dataColumns.push({field:i[r],header:i[r]});if(n.data[0][o]instanceof Object)for(r=0;r<n.data.length;r++){l=Object.keys(n.data[r][o]);for(var a=0;a<l.length;a++)if("object"==typeof n.data[r][o][l[a]]){var s=JSON.stringify(n.data[r][o][l[a]],null,"\n");n.data[r][o]["nestedString"+a]=s}n.data[r]=n.data[r][o]}}}})}return e.prototype.generateTreeMenu=function(e,t){var n=this;void 0===t&&(t={label:"",children:[]});var r=[];return Object.keys(e).map(function(i){if("object"==typeof e[i]){var o={label:"",children:[]};(o={label:"",children:[]}).label=i;var l=n.generateTreeMenu(e[i],o);t.children?t.children.push(l):t=l}else{var a={label:"",children:[]};a.label=i+" : "+e[i],r.push(a)}}),r.length>0&&(t.children=r.concat(t.children)),t},e.prototype.ngOnInit=function(){var e=this;this.loaded$=this.store.select("sqlQuery"),this.store.select("sqlQuery").subscribe(function(t){e.queryMessage=t.sqlQueryError.errors?t.sqlQueryError.errors[0].msg:""})},e.prototype.onSelect=function(e){this.selectedOutputView=e},e.prototype.exportToCSV=function(){var e=new Blob([this.jsonOutput],{type:"text/csv;charset=utf-8"});Object($h.saveAs)(e,"Asterix-results.csv")},e.prototype.exportToText=function(){var e=this.jsonOutput,t=new Blob([e],{type:"text/plain;charset=utf-8"});Object($h.saveAs)(t,"Asterix-results.txt")},e.prototype.expandTree=function(){"EXPAND TREE"===this.toogleExpand?this.expandAll():this.collapseAll()},e.prototype.expandAll=function(){var e=this;this.toogleExpand="TREE COLLAPSE",this.treeData.forEach(function(t){e.expandRecursive(t,!0)})},e.prototype.collapseAll=function(){var e=this;this.toogleExpand="EXPAND TREE",this.treeData.forEach(function(t){e.expandRecursive(t,!1)})},e.prototype.expandRecursive=function(e,t){var n=this;e.expanded=t,e.children&&e.children.forEach(function(e){n.expandRecursive(e,t)})},e}(),Qh=al["\u0275crt"]({encapsulation:0,styles:[['.sql-results-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;height:600px;width:100%;margin:10px;min-height:150px}.toolbar-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.results-selector[_ngcontent-%COMP%]{max-height:42px;min-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87);overflow-wrap:break-word;word-break:break-all}.content-area[_ngcontent-%COMP%]{position:relative;color:rgba(0,0,0,.87);height:500px;padding:0;margin:0;overflow:auto;font-size:.8rem;font-weight:500;font-family:Roboto,monospace}.leaf-list-open[_ngcontent-%COMP%], .root-closed[_ngcontent-%COMP%], .root-open[_ngcontent-%COMP%]{list-style-type:none}.leaf-list-open[_ngcontent-%COMP%]{padding-left:25px;color:red}.leaf-list-open.div[_ngcontent-%COMP%]   .leaf-list-open.li[_ngcontent-%COMP%]{margin-left:50px!important;color:green}.leaf[_ngcontent-%COMP%]{color:blue}.leaf-list-closed[_ngcontent-%COMP%]{list-style-type:none;display:none}ul[_ngcontent-%COMP%] > .root-closed[_ngcontent-%COMP%]:before{content:"+"}ul[_ngcontent-%COMP%] > .root-open[_ngcontent-%COMP%]:before{content:"-"}.queryErrorMessage[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding:5px;padding-left:10px}.metrics[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;color:rgba(54,147,209,.87);font-size:.8rem;font-weight:500}.span-results[_ngcontent-%COMP%]{padding-top:10px;padding-left:10px}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);margin:0}th[_ngcontent-%COMP%]{text-align:left!important}.datatable-header[_ngcontent-%COMP%]{color:red!important;background-color:blue}.data-viewer-container[_ngcontent-%COMP%]{padding:20px;padding-bottom:40px;height:100%;overflow:hidden}.output-group[_ngcontent-%COMP%]{margin-right:20px}.menu-export[_ngcontent-%COMP%]{font-size:.8rem!important;font-weight:500!important}.button-expand[_ngcontent-%COMP%], .button-export[_ngcontent-%COMP%]{margin-right:20px;color:rgba(54,147,209,.87)}.ui-datatable-data[_ngcontent-%COMP%] > tr[_ngcontent-%COMP%] > td[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;color:red}']],data:{}}),Yh="[Metadata Tree Query] UPDATE Metadata tree",Xh="[Metadata Tree Query] UPDATE Metadata tree Success",Jh=function(){return function(){this.type=Yh}}(),em=function(){return function(e){this.payload=e,this.type=Xh}}(),tm=function(){function e(e){var t=this;this.store=e,this.nodes=[],this.store.select(function(e){return e.metadata.tree}).subscribe(function(e){t.nodes=[];for(var n=0;n<e.length;n++)if(e[n].DataverseName){var r={id:0,name:"",children:[]};r.id=n,r.name=e[n].DataverseName;for(var i=0;i<e[n].Datasets.length;i++){var o={id:0,name:"",children:[]};o.id=i,o.name=e[n].Datasets[i].DatasetName,r.children.push(o)}t.nodes.push(r)}})}return e.prototype.treeCalc=function(){this.store.dispatch(new Jh)},e}(),nm=al["\u0275crt"]({encapsulation:0,styles:[[".query-container[_ngcontent-%COMP%]{width:100%;overflow:hidden}.metadata[_ngcontent-%COMP%], .query-container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:0;padding:0}.metadata[_ngcontent-%COMP%]{width:20%;border-right:1px solid rgba(0,0,0,.2)}.vertical[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:80%;overflow:hidden;margin:0;padding:1px0}.metadata-card[_ngcontent-%COMP%], .output-card[_ngcontent-%COMP%], .query-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;overflow:hidden;margin:0;padding:0}"]],data:{}}),rm=function(){function e(){this.message=""}return e.prototype.tabChange=function(){this.indexes.cleanUp(),this.datasets.cleanUp(),this.datatypes.cleanUp(),this.dataverses.cleanUp()},e}(),im=al["\u0275crt"]({encapsulation:0,styles:[[".datasets[_ngcontent-%COMP%], .datatypes[_ngcontent-%COMP%], .dataverses[_ngcontent-%COMP%], .indexes[_ngcontent-%COMP%]{margin:0;min-height:750px;max-height:750px;width:100%;overflow:hidden}.metadata-menu[_ngcontent-%COMP%]     .mat-tab-label{font-size:.8rem!important;font-weight:500!important}"]],data:{}}),om=function(e){this.store=e},lm=al["\u0275crt"]({encapsulation:0,styles:[[".content[_ngcontent-%COMP%]{width:95%;margin:0 auto}.menu[_ngcontent-%COMP%]     .mat-tab-label{font-size:.8rem!important;font-weight:500!important}"]],data:{}}),am=function(){return function(e){this.store=e,console.log("AsterixDB Web Console Core Service"),this.store.dispatch(new Wd("-")),this.store.dispatch(new sp("-")),this.store.dispatch(new Sp("-")),this.store.dispatch(new Bp("-"))}}(),sm=al["\u0275crt"]({encapsulation:0,styles:[[""]],data:{}}),um=al["\u0275ccf"]("awc-root",ul,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"awc-root",[],null,null,null,Ui,sm)),al["\u0275did"](1,49152,null,0,ul,[am],null,null)],null,null)},{},{},[]),cm=function(e,t){return!1},dm=function(e,t){return!1},pm=function(e,t,n){return[]};if("undefined"!=typeof Element){if(cm=function(e,t){return e.contains(t)},Element.prototype.matches)dm=function(e,t){return e.matches(t)};else{var fm=Element.prototype,hm=fm.matchesSelector||fm.mozMatchesSelector||fm.msMatchesSelector||fm.oMatchesSelector||fm.webkitMatchesSelector;hm&&(dm=function(e,t){return hm.apply(e,[t])})}pm=function(e,t,n){var r=[];if(n)r.push.apply(r,e.querySelectorAll(t));else{var i=e.querySelector(t);i&&r.push(i)}return r}}var mm=null,gm=!1,ym=dm,vm=cm,bm=pm,_m=function(){function e(){}return e.prototype.validateStyleProperty=function(e){return Ji(e)},e.prototype.matchesElement=function(e,t){return ym(e,t)},e.prototype.containsElement=function(e,t){return vm(e,t)},e.prototype.query=function(e,t,n){return bm(e,t,n)},e.prototype.computeStyle=function(e,t,n){return n||""},e.prototype.animate=function(e,t,n,r,i,o){return void 0===o&&(o=[]),new Rs.NoopAnimationPlayer},e}(),wm=function(){function e(){}return e.NOOP=new _m,e}(),xm=1e3,Cm="ng-trigger",Em=".ng-trigger",Sm=".ng-animating",Om=new RegExp("{{\\s*(.+?)\\s*}}","g"),Tm=/-+([a-z0-9])/g,km="*",Dm=new Set(["true","1"]),Im=new Set(["false","0"]),Rm=new RegExp("s*:selfs*,?","g"),Mm=function(){function e(e){this._driver=e}return e.prototype.build=function(e,t){var n=new Pm(t);return this._resetContextStyleTimingState(n),ho(this,so(e),n)},e.prototype._resetContextStyleTimingState=function(e){e.currentQuerySelector="",e.collectedStyles={},e.collectedStyles[""]={},e.currentTime=0},e.prototype.visitTrigger=function(e,t){var n=this,r=t.queryCount=0,i=t.depCount=0,o=[],l=[];return"@"==e.name.charAt(0)&&t.errors.push("animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))"),e.definitions.forEach(function(e){if(n._resetContextStyleTimingState(t),0==e.type){var a=e,s=a.name;s.split(/\s*,\s*/).forEach(function(e){a.name=e,o.push(n.visitState(a,t))}),a.name=s}else if(1==e.type){var u=n.visitTransition(e,t);r+=u.queryCount,i+=u.depCount,l.push(u)}else t.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:e.name,states:o,transitions:l,queryCount:r,depCount:i,options:null}},e.prototype.visitState=function(e,t){var n=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(n.containsDynamicStyles){var i=new Set,o=r||{};if(n.styles.forEach(function(e){if(yo(e)){var t=e;Object.keys(t).forEach(function(e){uo(t[e]).forEach(function(e){o.hasOwnProperty(e)||i.add(e)})})}}),i.size){var l=po(i.values());t.errors.push('state("'+e.name+'", ...) must define default values for all the following style substitutions: '+l.join(", "))}}return{type:0,name:e.name,style:n,options:r?{params:r}:null}},e.prototype.visitTransition=function(e,t){t.queryCount=0,t.depCount=0;var n=ho(this,so(e.animation),t);return{type:1,matchers:function(e,t){var n=[];return"string"==typeof e?e.split(/\s*,\s*/).forEach(function(e){return function(e,t,n){if(":"==e[0]){var r=function(e,t){switch(e){case":enter":return"void => *";case":leave":return"* => void";case":increment":return function(e,t){return parseFloat(t)>parseFloat(e)};case":decrement":return function(e,t){return parseFloat(t)<parseFloat(e)};default:return t.push('The transition alias value "'+e+'" is not supported'),"* => *"}}(e,n);if("function"==typeof r)return void t.push(r);e=r}var i=e.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==i||i.length<4)return n.push('The provided transition expression "'+e+'" is not supported'),t;var o=i[1],l=i[2],a=i[3];t.push(mo(o,a)),"<"!=l[0]||o==km&&a==km||t.push(mo(a,o))}(e,n,t)}):n.push(e),n}(e.expr,t.errors),animation:n,queryCount:t.queryCount,depCount:t.depCount,options:vo(e.options)}},e.prototype.visitSequence=function(e,t){var n=this;return{type:2,steps:e.steps.map(function(e){return ho(n,e,t)}),options:vo(e.options)}},e.prototype.visitGroup=function(e,t){var n=this,r=t.currentTime,i=0,o=e.steps.map(function(e){t.currentTime=r;var o=ho(n,e,t);return i=Math.max(i,t.currentTime),o});return t.currentTime=i,{type:3,steps:o,options:vo(e.options)}},e.prototype.visitAnimate=function(e,t){var n=function(e,t){var n=null;if(e.hasOwnProperty("duration"))n=e;else if("number"==typeof e)return bo(ro(e,t).duration,0,"");var r=e;if(r.split(/\s+/).some(function(e){return"{"==e.charAt(0)&&"{"==e.charAt(1)})){var i=bo(0,0,"");return i.dynamic=!0,i.strValue=r,i}return n=n||ro(r,t),bo(n.duration,n.delay,n.easing)}(e.timings,t.errors);t.currentAnimateTimings=n;var r,i=e.styles?e.styles:Object(Rs.style)({});if(5==i.type)r=this.visitKeyframes(i,t);else{var o=e.styles,l=!1;if(!o){l=!0;var a={};n.easing&&(a.easing=n.easing),o=Object(Rs.style)(a)}t.currentTime+=n.duration+n.delay;var s=this.visitStyle(o,t);s.isEmptyStep=l,r=s}return t.currentAnimateTimings=null,{type:4,timings:n,style:r,options:null}},e.prototype.visitStyle=function(e,t){var n=this._makeStyleAst(e,t);return this._validateStyleAst(n,t),n},e.prototype._makeStyleAst=function(e,t){var n=[];Array.isArray(e.styles)?e.styles.forEach(function(e){"string"==typeof e?e==Rs.AUTO_STYLE?n.push(e):t.errors.push("The provided style string value "+e+" is not allowed."):n.push(e)}):n.push(e.styles);var r=!1,i=null;return n.forEach(function(e){if(yo(e)){var t=e,n=t.easing;if(n&&(i=n,delete t.easing),!r)for(var o in t)if(t[o].toString().indexOf("{{")>=0){r=!0;break}}}),{type:6,styles:n,easing:i,offset:e.offset,containsDynamicStyles:r,options:null}},e.prototype._validateStyleAst=function(e,t){var n=this,r=t.currentAnimateTimings,i=t.currentTime,o=t.currentTime;r&&o>0&&(o-=r.duration+r.delay),e.styles.forEach(function(e){"string"!=typeof e&&Object.keys(e).forEach(function(r){if(n._driver.validateStyleProperty(r)){var l=t.collectedStyles[t.currentQuerySelector],a=l[r],s=!0;a&&(o!=i&&o>=a.startTime&&i<=a.endTime&&(t.errors.push('The CSS property "'+r+'" that exists between the times of "'+a.startTime+'ms" and "'+a.endTime+'ms" is also being animated in a parallel animation between the times of "'+o+'ms" and "'+i+'ms"'),s=!1),o=a.startTime),s&&(l[r]={startTime:o,endTime:i}),t.options&&function(n,i,o){var l=t.options.params||{},a=uo(e[r]);a.length&&a.forEach(function(e){l.hasOwnProperty(e)||o.push("Unable to resolve the local animation param "+e+" in the given list of values")})}(0,0,t.errors)}else t.errors.push('The provided animation property "'+r+'" is not a supported CSS property for animations')})})},e.prototype.visitKeyframes=function(e,t){var n=this,r={type:5,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push("keyframes() must be placed inside of a call to animate()"),r;var i=0,o=[],l=!1,a=!1,s=0,u=e.steps.map(function(e){var r=n._makeStyleAst(e,t),u=null!=r.offset?r.offset:function(e){if("string"==typeof e)return null;var t=null;if(Array.isArray(e))e.forEach(function(e){if(yo(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}});else if(yo(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}return t}(r.styles),c=0;return null!=u&&(i++,c=r.offset=u),a=a||c<0||c>1,l=l||c<s,s=c,o.push(c),r});a&&t.errors.push("Please ensure that all keyframe offsets are between 0 and 1"),l&&t.errors.push("Please ensure that all keyframe offsets are in order");var c=e.steps.length,d=0;i>0&&i<c?t.errors.push("Not all style() steps within the declared keyframes() contain offsets"):0==i&&(d=1/(c-1));var p=c-1,f=t.currentTime,h=t.currentAnimateTimings,m=h.duration;return u.forEach(function(e,i){var l=d>0?i==p?1:d*i:o[i],a=l*m;t.currentTime=f+h.delay+a,h.duration=a,n._validateStyleAst(e,t),e.offset=l,r.styles.push(e)}),r},e.prototype.visitReference=function(e,t){return{type:8,animation:ho(this,so(e.animation),t),options:vo(e.options)}},e.prototype.visitAnimateChild=function(e,t){return t.depCount++,{type:9,options:vo(e.options)}},e.prototype.visitAnimateRef=function(e,t){return{type:10,animation:this.visitReference(e.animation,t),options:vo(e.options)}},e.prototype.visitQuery=function(e,t){var n=t.currentQuerySelector,r=e.options||{};t.queryCount++,t.currentQuery=e;var i=function(e){var t=!!e.split(/\s*,\s*/).find(function(e){return":self"==e});return t&&(e=e.replace(Rm,"")),e=e.replace(/@\*/g,Em).replace(/@\w+/g,function(e){return Em+"-"+e.substr(1)}).replace(/:animating/g,Sm),[e,t]}(e.selector),o=i[0],l=i[1];t.currentQuerySelector=n.length?n+" "+o:o,Yi(t.collectedStyles,t.currentQuerySelector,{});var a=ho(this,so(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=n,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:l,animation:a,originalSelector:e.selector,options:vo(e.options)}},e.prototype.visitStagger=function(e,t){t.currentQuery||t.errors.push("stagger() can only be used inside of query()");var n="full"===e.timings?{duration:0,delay:0,easing:"full"}:ro(e.timings,t.errors,!0);return{type:12,animation:ho(this,so(e.animation),t),timings:n,options:null}},e}(),Pm=function(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null},Nm=function(){function e(){this._map=new Map}return e.prototype.consume=function(e){var t=this._map.get(e);return t?this._map.delete(e):t=[],t},e.prototype.append=function(e,t){var n=this._map.get(e);n||this._map.set(e,n=[]),n.push.apply(n,t)},e.prototype.has=function(e){return this._map.has(e)},e.prototype.clear=function(){this._map.clear()},e}(),Am=new RegExp(":enter","g"),Lm=new RegExp(":leave","g"),Fm=function(){function e(){}return e.prototype.buildKeyframes=function(e,t,n,r,i,o,l,a,s,u){void 0===u&&(u=[]),s=s||new Nm;var c=new Vm(e,t,s,r,i,u,[]);c.options=a,c.currentTimeline.setStyles([o],null,c.errors,a),ho(this,n,c);var d=c.timelines.filter(function(e){return e.containsAnimation()});if(d.length&&Object.keys(l).length){var p=d[d.length-1];p.allowOnlyTimelineStyles()||p.setStyles([l],null,c.errors,a)}return d.length?d.map(function(e){return e.buildKeyframes()}):[_o(t,[],[],[],0,0,"",!1)]},e.prototype.visitTrigger=function(e,t){},e.prototype.visitState=function(e,t){},e.prototype.visitTransition=function(e,t){},e.prototype.visitAnimateChild=function(e,t){var n=t.subInstructions.consume(t.element);if(n){var r=t.createSubContext(e.options),i=t.currentTimeline.currentTime,o=this._visitSubInstructions(n,r,r.options);i!=o&&t.transformIntoNewTimeline(o)}t.previousNode=e},e.prototype.visitAnimateRef=function(e,t){var n=t.createSubContext(e.options);n.transformIntoNewTimeline(),this.visitReference(e.animation,n),t.transformIntoNewTimeline(n.currentTimeline.currentTime),t.previousNode=e},e.prototype._visitSubInstructions=function(e,t,n){var r=t.currentTimeline.currentTime,i=null!=n.duration?to(n.duration):null,o=null!=n.delay?to(n.delay):null;return 0!==i&&e.forEach(function(e){var n=t.appendInstructionToTimeline(e,i,o);r=Math.max(r,n.duration+n.delay)}),r},e.prototype.visitReference=function(e,t){t.updateOptions(e.options,!0),ho(this,e.animation,t),t.previousNode=e},e.prototype.visitSequence=function(e,t){var n=this,r=t.subContextCount,i=t,o=e.options;if(o&&(o.params||o.delay)&&((i=t.createSubContext(o)).transformIntoNewTimeline(),null!=o.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=jm);var l=to(o.delay);i.delayNextStep(l)}e.steps.length&&(e.steps.forEach(function(e){return ho(n,e,i)}),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),t.previousNode=e},e.prototype.visitGroup=function(e,t){var n=this,r=[],i=t.currentTimeline.currentTime,o=e.options&&e.options.delay?to(e.options.delay):0;e.steps.forEach(function(l){var a=t.createSubContext(e.options);o&&a.delayNextStep(o),ho(n,l,a),i=Math.max(i,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(function(e){return t.currentTimeline.mergeTimelineCollectedStyles(e)}),t.transformIntoNewTimeline(i),t.previousNode=e},e.prototype._visitTiming=function(e,t){if(e.dynamic){var n=e.strValue;return ro(t.params?co(n,t.params,t.errors):n,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}},e.prototype.visitAnimate=function(e,t){var n=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;n.delay&&(t.incrementTime(n.delay),r.snapshotCurrentStyles());var i=e.style;5==i.type?this.visitKeyframes(i,t):(t.incrementTime(n.duration),this.visitStyle(i,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e},e.prototype.visitStyle=function(e,t){var n=t.currentTimeline,r=t.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var i=r&&r.easing||e.easing;e.isEmptyStep?n.applyEmptyStep(i):n.setStyles(e.styles,i,t.errors,t.options),t.previousNode=e},e.prototype.visitKeyframes=function(e,t){var n=t.currentAnimateTimings,r=t.currentTimeline.duration,i=n.duration,o=t.createSubContext().currentTimeline;o.easing=n.easing,e.styles.forEach(function(e){o.forwardTime((e.offset||0)*i),o.setStyles(e.styles,e.easing,t.errors,t.options),o.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(o),t.transformIntoNewTimeline(r+i),t.previousNode=e},e.prototype.visitQuery=function(e,t){var n=this,r=t.currentTimeline.currentTime,i=e.options||{},o=i.delay?to(i.delay):0;o&&(6===t.previousNode.type||0==r&&t.currentTimeline.getCurrentStyleProperties().length)&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=jm);var l=r,a=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!i.optional,t.errors);t.currentQueryTotal=a.length;var s=null;a.forEach(function(r,i){t.currentQueryIndex=i;var a=t.createSubContext(e.options,r);o&&a.delayNextStep(o),r===t.element&&(s=a.currentTimeline),ho(n,e.animation,a),a.currentTimeline.applyStylesToKeyframe();var u=a.currentTimeline.currentTime;l=Math.max(l,u)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(l),s&&(t.currentTimeline.mergeTimelineCollectedStyles(s),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e},e.prototype.visitStagger=function(e,t){var n=t.parentContext,r=t.currentTimeline,i=e.timings,o=Math.abs(i.duration),l=o*t.currentQueryIndex;switch(i.duration<0?"reverse":i.easing){case"reverse":l=o*(t.currentQueryTotal-1)-l;break;case"full":l=n.currentStaggerTime}var a=t.currentTimeline;l&&a.delayNextStep(l);var s=a.currentTime;ho(this,e.animation,t),t.previousNode=e,n.currentStaggerTime=r.currentTime-s+(r.startTime-n.currentTimeline.startTime)},e}(),jm={},Vm=function(){function e(e,t,n,r,i,o,l,a){this._driver=e,this.element=t,this.subInstructions=n,this._enterClassName=r,this._leaveClassName=i,this.errors=o,this.timelines=l,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=jm,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=a||new zm(this._driver,t,0),l.push(this.currentTimeline)}return Object.defineProperty(e.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),e.prototype.updateOptions=function(e,t){var n=this;if(e){var r=e,i=this.options;null!=r.duration&&(i.duration=to(r.duration)),null!=r.delay&&(i.delay=to(r.delay));var o=r.params;if(o){var l=i.params;l||(l=this.options.params={}),Object.keys(o).forEach(function(e){t&&l.hasOwnProperty(e)||(l[e]=co(o[e],l,n.errors))})}}},e.prototype._copyOptions=function(){var e={};if(this.options){var t=this.options.params;if(t){var n=e.params={};Object.keys(t).forEach(function(e){n[e]=t[e]})}}return e},e.prototype.createSubContext=function(t,n,r){void 0===t&&(t=null);var i=n||this.element,o=new e(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,r||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(t),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o},e.prototype.transformIntoNewTimeline=function(e){return this.previousNode=jm,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline},e.prototype.appendInstructionToTimeline=function(e,t,n){var r={duration:null!=t?t:e.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+e.delay,easing:""},i=new Bm(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(i),r},e.prototype.incrementTime=function(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)},e.prototype.delayNextStep=function(e){e>0&&this.currentTimeline.delayNextStep(e)},e.prototype.invokeQuery=function(e,t,n,r,i,o){var l=[];if(r&&l.push(this.element),e.length>0){e=(e=e.replace(Am,"."+this._enterClassName)).replace(Lm,"."+this._leaveClassName);var a=this._driver.query(this.element,e,1!=n);0!==n&&(a=n<0?a.slice(a.length+n,a.length):a.slice(0,n)),l.push.apply(l,a)}return i||0!=l.length||o.push('`query("'+t+'")` returned zero elements. (Use `query("'+t+'", { optional: true })` if you wish to allow this.)'),l},e}(),zm=function(){function e(e,t,n,r){this._driver=e,this.element=t,this.startTime=n,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}return e.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}},e.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(e.prototype,"currentTime",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),e.prototype.delayNextStep=function(e){var t=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e},e.prototype.fork=function(t,n){return this.applyStylesToKeyframe(),new e(this._driver,t,n||this.currentTime,this._elementTimelineStylesLookup)},e.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},e.prototype.forwardFrame=function(){this.duration+=1,this._loadKeyframe()},e.prototype.forwardTime=function(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()},e.prototype._updateStyle=function(e,t){this._localTimelineStyles[e]=t,this._globalTimelineStyles[e]=t,this._styleSummary[e]={time:this.currentTime,value:t}},e.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},e.prototype.applyEmptyStep=function(e){var t=this;e&&(this._previousKeyframe.easing=e),Object.keys(this._globalTimelineStyles).forEach(function(e){t._backFill[e]=t._globalTimelineStyles[e]||Rs.AUTO_STYLE,t._currentKeyframe[e]=Rs.AUTO_STYLE}),this._currentEmptyStepKeyframe=this._currentKeyframe},e.prototype.setStyles=function(e,t,n,r){var i=this;t&&(this._previousKeyframe.easing=t);var o=r&&r.params||{},l=function(t,n){var r,i={};return e.forEach(function(e){"*"===e?(r=r||Object.keys(n)).forEach(function(e){i[e]=Rs.AUTO_STYLE}):oo(e,!1,i)}),i}(0,this._globalTimelineStyles);Object.keys(l).forEach(function(e){var t=co(l[e],o,n);i._pendingStyles[e]=t,i._localTimelineStyles.hasOwnProperty(e)||(i._backFill[e]=i._globalTimelineStyles.hasOwnProperty(e)?i._globalTimelineStyles[e]:Rs.AUTO_STYLE),i._updateStyle(e,t)})},e.prototype.applyStylesToKeyframe=function(){var e=this,t=this._pendingStyles,n=Object.keys(t);0!=n.length&&(this._pendingStyles={},n.forEach(function(n){e._currentKeyframe[n]=t[n]}),Object.keys(this._localTimelineStyles).forEach(function(t){e._currentKeyframe.hasOwnProperty(t)||(e._currentKeyframe[t]=e._localTimelineStyles[t])}))},e.prototype.snapshotCurrentStyles=function(){var e=this;Object.keys(this._localTimelineStyles).forEach(function(t){var n=e._localTimelineStyles[t];e._pendingStyles[t]=n,e._updateStyle(t,n)})},e.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(e.prototype,"properties",{get:function(){var e=[];for(var t in this._currentKeyframe)e.push(t);return e},enumerable:!0,configurable:!0}),e.prototype.mergeTimelineCollectedStyles=function(e){var t=this;Object.keys(e._styleSummary).forEach(function(n){var r=t._styleSummary[n],i=e._styleSummary[n];(!r||i.time>r.time)&&t._updateStyle(n,i.value)})},e.prototype.buildKeyframes=function(){var e=this;this.applyStylesToKeyframe();var t=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration,i=[];this._keyframes.forEach(function(o,l){var a=oo(o,!0);Object.keys(a).forEach(function(e){var r=a[e];r==Rs["\u0275PRE_STYLE"]?t.add(e):r==Rs.AUTO_STYLE&&n.add(e)}),r||(a.offset=l/e.duration),i.push(a)});var o=t.size?po(t.values()):[],l=n.size?po(n.values()):[];if(r){var a=i[0],s=io(a);a.offset=0,s.offset=1,i=[a,s]}return _o(this.element,i,o,l,this.duration,this.startTime,this.easing,!1)},e}(),Bm=function(e){function t(t,n,r,i,o,l,a){void 0===a&&(a=!1);var s=e.call(this,t,n,l.delay)||this;return s.element=n,s.keyframes=r,s.preStyleProps=i,s.postStyleProps=o,s._stretchStartingKeyframe=a,s.timings={duration:l.duration,delay:l.delay,easing:l.easing},s}return Object(bl.__extends)(t,e),t.prototype.containsAnimation=function(){return this.keyframes.length>1},t.prototype.buildKeyframes=function(){var e=this.keyframes,t=this.timings,n=t.delay,r=t.duration,i=t.easing;if(this._stretchStartingKeyframe&&n){var o=[],l=r+n,a=n/l,s=oo(e[0],!1);s.offset=0,o.push(s);var u=oo(e[0],!1);u.offset=xo(a),o.push(u);for(var c=e.length-1,d=1;d<=c;d++){var p=oo(e[d],!1);p.offset=xo((n+p.offset*r)/l),o.push(p)}r=l,n=0,i="",e=o}return _o(this.element,e,this.preStyleProps,this.postStyleProps,r,n,i,!0)},t}(zm),Hm=function(){},Wm=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t.prototype.normalizePropertyName=function(e,t){return fo(e)},t.prototype.normalizeStyleValue=function(e,t,n,r){var i="",o=n.toString().trim();if(qm[t]&&0!==n&&"0"!==n)if("number"==typeof n)i="px";else{var l=n.match(/^[+-]?[\d\.]+([a-z]*)$/);l&&0==l[1].length&&r.push("Please provide a CSS unit value for "+e+":"+n)}return o+i},t}(Hm),qm=function(e){var t={};return"width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(",").forEach(function(e){return t[e]=!0}),t}(),Um={},Gm=function(){function e(e,t,n){this._triggerName=e,this.ast=t,this._stateStyles=n}return e.prototype.match=function(e,t){return function(e,t,n){return e.some(function(e){return e(t,n)})}(this.ast.matchers,e,t)},e.prototype.buildStyles=function(e,t,n){var r=this._stateStyles["*"],i=this._stateStyles[e],o=r?r.buildStyles(t,n):{};return i?i.buildStyles(t,n):o},e.prototype.build=function(e,t,n,r,i,o,l,a,s){var u=[],c=this.ast.options&&this.ast.options.params||Um,d=this.buildStyles(n,l&&l.params||Um,u),p=a&&a.params||Um,f=this.buildStyles(r,p,u),h=new Set,m=new Map,g=new Map,y="void"===r,v={params:Object(bl.__assign)({},c,p)},b=wo(e,t,this.ast.animation,i,o,d,f,v,s,u);if(u.length)return Co(t,this._triggerName,n,r,y,d,f,[],[],m,g,u);b.forEach(function(e){var n=e.element,r=Yi(m,n,{});e.preStyleProps.forEach(function(e){return r[e]=!0});var i=Yi(g,n,{});e.postStyleProps.forEach(function(e){return i[e]=!0}),n!==t&&h.add(n)});var _=po(h.values());return Co(t,this._triggerName,n,r,y,d,f,b,_,m,g)},e}(),Km=function(){function e(e,t){this.styles=e,this.defaultParams=t}return e.prototype.buildStyles=function(e,t){var n={},r=io(this.defaultParams);return Object.keys(e).forEach(function(t){var n=e[t];null!=n&&(r[t]=n)}),this.styles.styles.forEach(function(e){if("string"!=typeof e){var i=e;Object.keys(i).forEach(function(e){var o=i[e];o.length>1&&(o=co(o,r,t)),n[e]=o})}}),n},e}(),$m=function(){function e(e,t){var n=this;this.name=e,this.ast=t,this.transitionFactories=[],this.states={},t.states.forEach(function(e){n.states[e.name]=new Km(e.style,e.options&&e.options.params||{})}),Eo(this.states,"true","1"),Eo(this.states,"false","0"),t.transitions.forEach(function(t){n.transitionFactories.push(new Gm(e,t,n.states))}),this.fallbackTransition=function(t,n){return new Gm(e,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(e,t){return!0}],options:null,queryCount:0,depCount:0},n)}(0,this.states)}return Object.defineProperty(e.prototype,"containsQueries",{get:function(){return this.ast.queryCount>0},enumerable:!0,configurable:!0}),e.prototype.matchTransition=function(e,t){return this.transitionFactories.find(function(n){return n.match(e,t)})||null},e.prototype.matchStyles=function(e,t,n){return this.fallbackTransition.buildStyles(e,t,n)},e}(),Zm=new Nm,Qm=function(){function e(e,t){this._driver=e,this._normalizer=t,this._animations={},this._playersById={},this.players=[]}return e.prototype.register=function(e,t){var n=[],r=go(this._driver,t,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[e]=r},e.prototype._buildPlayer=function(e,t,n){var r=e.element,i=Ki(0,this._normalizer,0,e.keyframes,t,n);return this._driver.animate(r,i,e.duration,e.delay,e.easing,[])},e.prototype.create=function(e,t,n){var r=this;void 0===n&&(n={});var i,o=[],l=this._animations[e],a=new Map;if(l?(i=wo(this._driver,t,l,"ng-enter","ng-leave",{},{},n,Zm,o)).forEach(function(e){var t=Yi(a,e.element,{});e.postStyleProps.forEach(function(e){return t[e]=null})}):(o.push("The requested animation doesn't exist or has already been destroyed"),i=[]),o.length)throw new Error("Unable to create the animation due to the following errors: "+o.join("\n"));a.forEach(function(e,t){Object.keys(e).forEach(function(n){e[n]=r._driver.computeStyle(t,n,Rs.AUTO_STYLE)})});var s=Gi(i.map(function(e){var t=a.get(e.element);return r._buildPlayer(e,{},t)}));return this._playersById[e]=s,s.onDestroy(function(){return r.destroy(e)}),this.players.push(s),s},e.prototype.destroy=function(e){var t=this._getPlayer(e);t.destroy(),delete this._playersById[e];var n=this.players.indexOf(t);n>=0&&this.players.splice(n,1)},e.prototype._getPlayer=function(e){var t=this._playersById[e];if(!t)throw new Error("Unable to find the timeline player referenced by "+e);return t},e.prototype.listen=function(e,t,n,r){var i=Qi(t,"","","");return $i(this._getPlayer(e),n,i,r),function(){}},e.prototype.command=function(e,t,n,r){if("register"!=n)if("create"!=n){var i=this._getPlayer(e);switch(n){case"play":i.play();break;case"pause":i.pause();break;case"reset":i.reset();break;case"restart":i.restart();break;case"finish":i.finish();break;case"init":i.init();break;case"setPosition":i.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(e)}}else this.create(e,t,r[0]||{});else this.register(e,r[0])},e}(),Ym="ng-animate-disabled",Xm=".ng-animate-disabled",Jm=[],eg={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!1},tg={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!0},ng="__ng_removed",rg=function(){function e(e,t){void 0===t&&(t=""),this.namespaceId=t;var n=e&&e.hasOwnProperty("value");if(this.value=function(e){return null!=e?e:null}(n?e.value:e),n){var r=io(e);delete r.value,this.options=r}else this.options={};this.options.params||(this.options.params={})}return Object.defineProperty(e.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),e.prototype.absorbOptions=function(e){var t=e.params;if(t){var n=this.options.params;Object.keys(t).forEach(function(e){null==n[e]&&(n[e]=t[e])})}},e}(),ig=new rg("void"),og=new rg("DELETED"),lg=function(){function e(e,t,n){this.id=e,this.hostElement=t,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+e,Do(t,this._hostClassName)}return e.prototype.listen=function(e,t,n,r){var i=this;if(!this._triggers.hasOwnProperty(t))throw new Error('Unable to listen on the animation trigger event "'+n+'" because the animation trigger "'+t+"\" doesn't exist!");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger "'+t+'" because the provided event is undefined!');if("start"!=n&&"done"!=n)throw new Error('The provided animation trigger event "'+n+'" for the animation trigger "'+t+'" is not supported!');var o=Yi(this._elementListeners,e,[]),l={name:t,phase:n,callback:r};o.push(l);var a=Yi(this._engine.statesByElement,e,{});return a.hasOwnProperty(t)||(Do(e,Cm),Do(e,Cm+"-"+t),a[t]=ig),function(){i._engine.afterFlush(function(){var e=o.indexOf(l);e>=0&&o.splice(e,1),i._triggers[t]||delete a[t]})}},e.prototype.register=function(e,t){return!this._triggers[e]&&(this._triggers[e]=t,!0)},e.prototype._getTrigger=function(e){var t=this._triggers[e];if(!t)throw new Error('The provided animation trigger "'+e+'" has not been registered!');return t},e.prototype.trigger=function(e,t,n,r){var i=this;void 0===r&&(r=!0);var o=this._getTrigger(t),l=new sg(this.id,t,e),a=this._engine.statesByElement.get(e);a||(Do(e,Cm),Do(e,Cm+"-"+t),this._engine.statesByElement.set(e,a={}));var s=a[t],u=new rg(n,this.id);if(!(n&&n.hasOwnProperty("value"))&&s&&u.absorbOptions(s.options),a[t]=u,s){if(s===og)return l}else s=ig;if("void"===u.value||s.value!==u.value){var c=Yi(this._engine.playersByElement,e,[]);c.forEach(function(e){e.namespaceId==i.id&&e.triggerName==t&&e.queued&&e.destroy()});var d=o.matchTransition(s.value,u.value),p=!1;if(!d){if(!r)return;d=o.fallbackTransition,p=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:d,fromState:s,toState:u,player:l,isFallbackTransition:p}),p||(Do(e,"ng-animate-queued"),l.onStart(function(){Io(e,"ng-animate-queued")})),l.onDone(function(){var t=i.players.indexOf(l);t>=0&&i.players.splice(t,1);var n=i._engine.playersByElement.get(e);if(n){var r=n.indexOf(l);r>=0&&n.splice(r,1)}}),this.players.push(l),c.push(l),l}if(!function(e,t){var n=Object.keys(e),r=Object.keys(t);if(n.length!=r.length)return!1;for(var i=0;i<n.length;i++){var o=n[i];if(!t.hasOwnProperty(o)||e[o]!==t[o])return!1}return!0}(s.params,u.params)){var f=[],h=o.matchStyles(s.value,s.params,f),m=o.matchStyles(u.value,u.params,f);f.length?this._engine.reportError(f):this._engine.afterFlush(function(){ao(e,h),lo(e,m)})}},e.prototype.deregister=function(e){var t=this;delete this._triggers[e],this._engine.statesByElement.forEach(function(t,n){delete t[e]}),this._elementListeners.forEach(function(n,r){t._elementListeners.set(r,n.filter(function(t){return t.name!=e}))})},e.prototype.clearElementCache=function(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);var t=this._engine.playersByElement.get(e);t&&(t.forEach(function(e){return e.destroy()}),this._engine.playersByElement.delete(e))},e.prototype._signalRemovalForInnerTriggers=function(e,t,n){var r=this;void 0===n&&(n=!1),this._engine.driver.query(e,Em,!0).forEach(function(e){if(!e[ng]){var n=r._engine.fetchNamespacesByElement(e);n.size?n.forEach(function(n){return n.triggerLeaveAnimation(e,t,!1,!0)}):r.clearElementCache(e)}})},e.prototype.triggerLeaveAnimation=function(e,t,n,r){var i=this,o=this._engine.statesByElement.get(e);if(o){var l=[];if(Object.keys(o).forEach(function(t){if(i._triggers[t]){var n=i.trigger(e,t,"void",r);n&&l.push(n)}}),l.length)return this._engine.markElementAsRemoved(this.id,e,!0,t),n&&Gi(l).onDone(function(){return i._engine.processLeaveNode(e)}),!0}return!1},e.prototype.prepareLeaveAnimationListeners=function(e){var t=this,n=this._elementListeners.get(e);if(n){var r=new Set;n.forEach(function(n){var i=n.name;if(!r.has(i)){r.add(i);var o=t._triggers[i].fallbackTransition,l=t._engine.statesByElement.get(e)[i]||ig,a=new rg("void"),s=new sg(t.id,i,e);t._engine.totalQueuedPlayers++,t._queue.push({element:e,triggerName:i,transition:o,fromState:l,toState:a,player:s,isFallbackTransition:!0})}})}},e.prototype.removeNode=function(e,t){var n=this,r=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,t,!0),!this.triggerLeaveAnimation(e,t,!0)){var i=!1;if(r.totalAnimations){var o=r.players.length?r.playersByQueriedElement.get(e):[];if(o&&o.length)i=!0;else for(var l=e;l=l.parentNode;)if(r.statesByElement.get(l)){i=!0;break}}this.prepareLeaveAnimationListeners(e),i?r.markElementAsRemoved(this.id,e,!1,t):(r.afterFlush(function(){return n.clearElementCache(e)}),r.destroyInnerAnimations(e),r._onRemovalComplete(e,t))}},e.prototype.insertNode=function(e,t){Do(e,this._hostClassName)},e.prototype.drainQueuedTransitions=function(e){var t=this,n=[];return this._queue.forEach(function(r){var i=r.player;if(!i.destroyed){var o=r.element,l=t._elementListeners.get(o);l&&l.forEach(function(t){if(t.name==r.triggerName){var n=Qi(o,r.triggerName,r.fromState.value,r.toState.value);n._data=e,$i(r.player,t.phase,n,t.callback)}}),i.markedForDestroy?t._engine.afterFlush(function(){i.destroy()}):n.push(r)}}),this._queue=[],n.sort(function(e,n){var r=e.transition.ast.depCount,i=n.transition.ast.depCount;return 0==r||0==i?r-i:t._engine.driver.containsElement(e.element,n.element)?1:-1})},e.prototype.destroy=function(e){this.players.forEach(function(e){return e.destroy()}),this._signalRemovalForInnerTriggers(this.hostElement,e)},e.prototype.elementContainsData=function(e){var t=!1;return this._elementListeners.has(e)&&(t=!0),t=!!this._queue.find(function(t){return t.element===e})||t},e}(),ag=function(){function e(e,t){this.driver=e,this._normalizer=t,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=function(e,t){}}return e.prototype._onRemovalComplete=function(e,t){this.onRemovalComplete(e,t)},Object.defineProperty(e.prototype,"queuedPlayers",{get:function(){var e=[];return this._namespaceList.forEach(function(t){t.players.forEach(function(t){t.queued&&e.push(t)})}),e},enumerable:!0,configurable:!0}),e.prototype.createNamespace=function(e,t){var n=new lg(e,t,this);return t.parentNode?this._balanceNamespaceList(n,t):(this.newHostElements.set(t,n),this.collectEnterElement(t)),this._namespaceLookup[e]=n},e.prototype._balanceNamespaceList=function(e,t){var n=this._namespaceList.length-1;if(n>=0){for(var r=!1,i=n;i>=0;i--)if(this.driver.containsElement(this._namespaceList[i].hostElement,t)){this._namespaceList.splice(i+1,0,e),r=!0;break}r||this._namespaceList.splice(0,0,e)}else this._namespaceList.push(e);return this.namespacesByHostElement.set(t,e),e},e.prototype.register=function(e,t){var n=this._namespaceLookup[e];return n||(n=this.createNamespace(e,t)),n},e.prototype.registerTrigger=function(e,t,n){var r=this._namespaceLookup[e];r&&r.register(t,n)&&this.totalAnimations++},e.prototype.destroy=function(e,t){var n=this;if(e){var r=this._fetchNamespace(e);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[e];var t=n._namespaceList.indexOf(r);t>=0&&n._namespaceList.splice(t,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(t)})}},e.prototype._fetchNamespace=function(e){return this._namespaceLookup[e]},e.prototype.fetchNamespacesByElement=function(e){var t=new Set,n=this.statesByElement.get(e);if(n)for(var r=Object.keys(n),i=0;i<r.length;i++){var o=n[r[i]].namespaceId;if(o){var l=this._fetchNamespace(o);l&&t.add(l)}}return t},e.prototype.trigger=function(e,t,n,r){return!!So(t)&&(this._fetchNamespace(e).trigger(t,n,r),!0)},e.prototype.insertNode=function(e,t,n,r){if(So(t)){var i=t[ng];i&&i.setForRemoval&&(i.setForRemoval=!1),e&&this._fetchNamespace(e).insertNode(t,n),r&&this.collectEnterElement(t)}},e.prototype.collectEnterElement=function(e){this.collectedEnterElements.push(e)},e.prototype.markElementAsDisabled=function(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),Do(e,Ym)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),Io(e,Ym))},e.prototype.removeNode=function(e,t,n){if(So(t)){var r=e?this._fetchNamespace(e):null;r?r.removeNode(t,n):this.markElementAsRemoved(e,t,!1,n)}else this._onRemovalComplete(t,n)},e.prototype.markElementAsRemoved=function(e,t,n,r){this.collectedLeaveElements.push(t),t[ng]={namespaceId:e,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},e.prototype.listen=function(e,t,n,r,i){return So(t)?this._fetchNamespace(e).listen(t,n,r,i):function(){}},e.prototype._buildInstruction=function(e,t,n,r){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,n,r,e.fromState.options,e.toState.options,t)},e.prototype.destroyInnerAnimations=function(e){var t=this,n=this.driver.query(e,Em,!0);n.forEach(function(e){return t.destroyActiveAnimationsForElement(e)}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(e,Sm,!0)).forEach(function(e){return t.finishActiveQueriedAnimationOnElement(e)})},e.prototype.destroyActiveAnimationsForElement=function(e){var t=this.playersByElement.get(e);t&&t.forEach(function(e){e.queued?e.markedForDestroy=!0:e.destroy()});var n=this.statesByElement.get(e);n&&Object.keys(n).forEach(function(e){return n[e]=og})},e.prototype.finishActiveQueriedAnimationOnElement=function(e){var t=this.playersByQueriedElement.get(e);t&&t.forEach(function(e){return e.finish()})},e.prototype.whenRenderingDone=function(){var e=this;return new Promise(function(t){if(e.players.length)return Gi(e.players).onDone(function(){return t()});t()})},e.prototype.processLeaveNode=function(e){var t=this,n=e[ng];if(n&&n.setForRemoval){if(e[ng]=eg,n.namespaceId){this.destroyInnerAnimations(e);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(e)}this._onRemovalComplete(e,n.setForRemoval)}this.driver.matchesElement(e,Xm)&&this.markElementAsDisabled(e,!1),this.driver.query(e,Xm,!0).forEach(function(n){t.markElementAsDisabled(e,!1)})},e.prototype.flush=function(e){var t=this;void 0===e&&(e=-1);var n=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(e,n){return t._balanceNamespaceList(e,n)}),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(var r=0;r<this.collectedEnterElements.length;r++)Do(this.collectedEnterElements[r],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var i=[];try{n=this._flushAnimations(i,e)}finally{for(r=0;r<i.length;r++)i[r]()}}else for(r=0;r<this.collectedLeaveElements.length;r++)this.processLeaveNode(this.collectedLeaveElements[r]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(function(e){return e()}),this._flushFns=[],this._whenQuietFns.length){var o=this._whenQuietFns;this._whenQuietFns=[],n.length?Gi(n).onDone(function(){o.forEach(function(e){return e()})}):o.forEach(function(e){return e()})}},e.prototype.reportError=function(e){throw new Error("Unable to process animations due to the following failed trigger transitions\n "+e.join("\n"))},e.prototype._flushAnimations=function(e,t){var n=this,r=new Nm,i=[],o=new Map,l=[],a=new Map,s=new Map,u=new Map,c=new Set;this.disabledNodes.forEach(function(e){c.add(e);for(var t=n.driver.query(e,".ng-animate-queued",!0),r=0;r<t.length;r++)c.add(t[r])});var d=eo(),p=Array.from(this.statesByElement.keys()),f=ko(p,this.collectedEnterElements),h=new Map,m=0;f.forEach(function(e,t){var n="ng-enter"+m++;h.set(t,n),e.forEach(function(e){return Do(e,n)})});for(var g=[],y=new Set,v=new Set,b=0;b<this.collectedLeaveElements.length;b++)(L=(A=this.collectedLeaveElements[b])[ng])&&L.setForRemoval&&(g.push(A),y.add(A),L.hasAnimation?this.driver.query(A,".ng-star-inserted",!0).forEach(function(e){return y.add(e)}):v.add(A));var _=new Map,w=ko(p,Array.from(y));w.forEach(function(e,t){var n="ng-leave"+m++;_.set(t,n),e.forEach(function(e){return Do(e,n)})}),e.push(function(){f.forEach(function(e,t){var n=h.get(t);e.forEach(function(e){return Io(e,n)})}),w.forEach(function(e,t){var n=_.get(t);e.forEach(function(e){return Io(e,n)})}),g.forEach(function(e){n.processLeaveNode(e)})});for(var x=[],C=[],E=this._namespaceList.length-1;E>=0;E--)this._namespaceList[E].drainQueuedTransitions(t).forEach(function(e){var t=e.player;x.push(t);var o=e.element;if(d&&n.driver.containsElement(d,o)){var c=_.get(o),p=h.get(o),f=n._buildInstruction(e,r,p,c);if(f.errors&&f.errors.length)C.push(f);else{if(e.isFallbackTransition)return t.onStart(function(){return ao(o,f.fromStyles)}),t.onDestroy(function(){return lo(o,f.toStyles)}),void i.push(t);f.timelines.forEach(function(e){return e.stretchStartingKeyframe=!0}),r.append(o,f.timelines),l.push({instruction:f,player:t,element:o}),f.queriedElements.forEach(function(e){return Yi(a,e,[]).push(t)}),f.preStyleProps.forEach(function(e,t){var n=Object.keys(e);if(n.length){var r=s.get(t);r||s.set(t,r=new Set),n.forEach(function(e){return r.add(e)})}}),f.postStyleProps.forEach(function(e,t){var n=Object.keys(e),r=u.get(t);r||u.set(t,r=new Set),n.forEach(function(e){return r.add(e)})})}}else t.destroy()});if(C.length){var S=[];C.forEach(function(e){S.push("@"+e.triggerName+" has failed due to:\n"),e.errors.forEach(function(e){return S.push("- "+e+"\n")})}),x.forEach(function(e){return e.destroy()}),this.reportError(S)}var O=new Map,T=new Map;l.forEach(function(e){var t=e.element;r.has(t)&&(T.set(t,t),n._beforeAnimationBuild(e.player.namespaceId,e.instruction,O))}),i.forEach(function(e){var t=e.element;n._getPreviousPlayers(t,!1,e.namespaceId,e.triggerName,null).forEach(function(e){Yi(O,t,[]).push(e),e.destroy()})});var k=g.filter(function(e){return Mo(e,s,u)}),D=new Map;To(D,this.driver,v,u,Rs.AUTO_STYLE).forEach(function(e){Mo(e,s,u)&&k.push(e)});var I=new Map;f.forEach(function(e,t){To(I,n.driver,new Set(e),s,Rs["\u0275PRE_STYLE"])}),k.forEach(function(e){var t=D.get(e),n=I.get(e);D.set(e,Object(bl.__assign)({},t,n))});var R=[],M=[],P={};l.forEach(function(e){var t=e.element,l=e.player,a=e.instruction;if(r.has(t)){if(c.has(t))return l.onDestroy(function(){return lo(t,a.toStyles)}),void i.push(l);var s=P;if(T.size>1){for(var u=t,d=[];u=u.parentNode;){var p=T.get(u);if(p){s=p;break}d.push(u)}d.forEach(function(e){return T.set(e,s)})}var f=n._buildAnimation(l.namespaceId,a,O,o,I,D);if(l.setRealPlayer(f),s===P)R.push(l);else{var h=n.playersByElement.get(s);h&&h.length&&(l.parentPlayer=Gi(h)),i.push(l)}}else ao(t,a.fromStyles),l.onDestroy(function(){return lo(t,a.toStyles)}),M.push(l),c.has(t)&&i.push(l)}),M.forEach(function(e){var t=o.get(e.element);if(t&&t.length){var n=Gi(t);e.setRealPlayer(n)}}),i.forEach(function(e){e.parentPlayer?e.syncPlayerEvents(e.parentPlayer):e.destroy()});for(var N=0;N<g.length;N++){var A,L=(A=g[N])[ng];if(Io(A,"ng-leave"),!L||!L.hasAnimation){var F=[];if(a.size){var j=a.get(A);j&&j.length&&F.push.apply(F,j);for(var V=this.driver.query(A,Sm,!0),z=0;z<V.length;z++){var B=a.get(V[z]);B&&B.length&&F.push.apply(F,B)}}var H=F.filter(function(e){return!e.destroyed});H.length?function(e,t,n){Gi(H).onDone(function(){return e.processLeaveNode(t)})}(this,A):this.processLeaveNode(A)}}return g.length=0,R.forEach(function(e){n.players.push(e),e.onDone(function(){e.destroy();var t=n.players.indexOf(e);n.players.splice(t,1)}),e.play()}),R},e.prototype.elementContainsData=function(e,t){var n=!1,r=t[ng];return r&&r.setForRemoval&&(n=!0),this.playersByElement.has(t)&&(n=!0),this.playersByQueriedElement.has(t)&&(n=!0),this.statesByElement.has(t)&&(n=!0),this._fetchNamespace(e).elementContainsData(t)||n},e.prototype.afterFlush=function(e){this._flushFns.push(e)},e.prototype.afterFlushAnimationsDone=function(e){this._whenQuietFns.push(e)},e.prototype._getPreviousPlayers=function(e,t,n,r,i){var o=[];if(t){var l=this.playersByQueriedElement.get(e);l&&(o=l)}else{var a=this.playersByElement.get(e);if(a){var s=!i||"void"==i;a.forEach(function(e){e.queued||(s||e.triggerName==r)&&o.push(e)})}}return(n||r)&&(o=o.filter(function(e){return!(n&&n!=e.namespaceId||r&&r!=e.triggerName)})),o},e.prototype._beforeAnimationBuild=function(e,t,n){for(var r=t.element,i=t.isRemovalTransition?void 0:e,o=t.isRemovalTransition?void 0:t.triggerName,l=function(e){var l=e.element,s=l!==r,u=Yi(n,l,[]);a._getPreviousPlayers(l,s,i,o,t.toState).forEach(function(e){var t=e.getRealPlayer();t.beforeDestroy&&t.beforeDestroy(),e.destroy(),u.push(e)})},a=this,s=0,u=t.timelines;s<u.length;s++)l(u[s]);ao(r,t.fromStyles)},e.prototype._buildAnimation=function(e,t,n,r,i,o){var l=this,a=t.triggerName,s=t.element,u=[],c=new Set,d=new Set,p=t.timelines.map(function(t){var p=t.element;c.add(p);var f=p[ng];if(f&&f.removedBeforeQueried)return new Rs.NoopAnimationPlayer;var h=p!==s,m=function(e){var t=[];return Ro((n.get(p)||Jm).map(function(e){return e.getRealPlayer()}),t),t}().filter(function(e){return!!e.element&&e.element===p}),g=i.get(p),y=o.get(p),v=Ki(0,l._normalizer,0,t.keyframes,g,y),b=l._buildPlayer(t,v,m);if(t.subTimeline&&r&&d.add(p),h){var _=new sg(e,a,p);_.setRealPlayer(b),u.push(_)}return b});u.forEach(function(e){Yi(l.playersByQueriedElement,e.element,[]).push(e),e.onDone(function(){return function(e,t,n){var r;if(e instanceof Map){if(r=e.get(t)){if(r.length){var i=r.indexOf(n);r.splice(i,1)}0==r.length&&e.delete(t)}}else(r=e[t])&&(r.length&&(i=r.indexOf(n),r.splice(i,1)),0==r.length&&delete e[t]);return r}(l.playersByQueriedElement,e.element,e)})}),c.forEach(function(e){return Do(e,"ng-animating")});var f=Gi(p);return f.onDestroy(function(){c.forEach(function(e){return Io(e,"ng-animating")}),lo(s,t.toStyles)}),d.forEach(function(e){Yi(r,e,[]).push(f)}),f},e.prototype._buildPlayer=function(e,t,n){return t.length>0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,n):new Rs.NoopAnimationPlayer},e}(),sg=function(){function e(e,t,n){this.namespaceId=e,this.triggerName=t,this.element=n,this._player=new Rs.NoopAnimationPlayer,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1}return Object.defineProperty(e.prototype,"queued",{get:function(){return 0==this._containsRealPlayer},enumerable:!0,configurable:!0}),e.prototype.setRealPlayer=function(e){var t=this;this._containsRealPlayer||(this._player=e,Object.keys(this._queuedCallbacks).forEach(function(n){t._queuedCallbacks[n].forEach(function(t){return $i(e,n,void 0,t)})}),this._queuedCallbacks={},this._containsRealPlayer=!0)},e.prototype.getRealPlayer=function(){return this._player},e.prototype.syncPlayerEvents=function(e){var t=this,n=this._player;n.triggerCallback&&e.onStart(function(){return n.triggerCallback("start")}),e.onDone(function(){return t.finish()}),e.onDestroy(function(){return t.destroy()})},e.prototype._queueEvent=function(e,t){Yi(this._queuedCallbacks,e,[]).push(t)},e.prototype.onDone=function(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)},e.prototype.onStart=function(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)},e.prototype.onDestroy=function(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)},e.prototype.init=function(){this._player.init()},e.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},e.prototype.play=function(){!this.queued&&this._player.play()},e.prototype.pause=function(){!this.queued&&this._player.pause()},e.prototype.restart=function(){!this.queued&&this._player.restart()},e.prototype.finish=function(){this._player.finish()},e.prototype.destroy=function(){this.destroyed=!0,this._player.destroy()},e.prototype.reset=function(){!this.queued&&this._player.reset()},e.prototype.setPosition=function(e){this.queued||this._player.setPosition(e)},e.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},Object.defineProperty(e.prototype,"totalTime",{get:function(){return this._player.totalTime},enumerable:!0,configurable:!0}),e.prototype.triggerCallback=function(e){var t=this._player;t.triggerCallback&&t.triggerCallback(e)},e}(),ug="$$classes",cg=function(){function e(e,t){var n=this;this._driver=e,this._triggerCache={},this.onRemovalComplete=function(e,t){},this._transitionEngine=new ag(e,t),this._timelineEngine=new Qm(e,t),this._transitionEngine.onRemovalComplete=function(e,t){return n.onRemovalComplete(e,t)}}return e.prototype.registerTrigger=function(e,t,n,r,i){var o=e+"-"+r,l=this._triggerCache[o];if(!l){var a=[],s=go(this._driver,i,a);if(a.length)throw new Error('The animation trigger "'+r+'" has failed to build due to the following errors:\n - '+a.join("\n - "));l=new $m(r,s),this._triggerCache[o]=l}this._transitionEngine.registerTrigger(t,r,l)},e.prototype.register=function(e,t){this._transitionEngine.register(e,t)},e.prototype.destroy=function(e,t){this._transitionEngine.destroy(e,t)},e.prototype.onInsert=function(e,t,n,r){this._transitionEngine.insertNode(e,t,n,r)},e.prototype.onRemove=function(e,t,n){this._transitionEngine.removeNode(e,t,n)},e.prototype.disableAnimations=function(e,t){this._transitionEngine.markElementAsDisabled(e,t)},e.prototype.process=function(e,t,n,r){if("@"==n.charAt(0)){var i=Xi(n);this._timelineEngine.command(i[0],t,i[1],r)}else this._transitionEngine.trigger(e,t,n,r)},e.prototype.listen=function(e,t,n,r,i){if("@"==n.charAt(0)){var o=Xi(n);return this._timelineEngine.listen(o[0],t,o[1],i)}return this._transitionEngine.listen(e,t,n,r,i)},e.prototype.flush=function(e){void 0===e&&(e=-1),this._transitionEngine.flush(e)},Object.defineProperty(e.prototype,"players",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),e.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},e}(),dg=function(){function e(e,t,n,r){void 0===r&&(r=[]);var i=this;this.element=e,this.keyframes=t,this.options=n,this.previousPlayers=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.previousStyles={},this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay,function(e,t){return 0===e||0===t}(this._duration,this._delay)&&r.forEach(function(e){var t=e.currentSnapshot;Object.keys(t).forEach(function(e){return i.previousStyles[e]=t[e]})})}return e.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},e.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},e.prototype._buildPlayer=function(){var e=this;if(!this._initialized){this._initialized=!0;var t=this.keyframes.map(function(e){return oo(e,!1)}),n=Object.keys(this.previousStyles);if(n.length&&t.length){var r=t[0],i=[];if(n.forEach(function(t){r.hasOwnProperty(t)||i.push(t),r[t]=e.previousStyles[t]}),i.length)for(var o=this,l=function(){var e=t[a];i.forEach(function(t){e[t]=Po(o.element,t)})},a=1;a<t.length;a++)l()}this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:{},this.domPlayer.addEventListener("finish",function(){return e._onFinish()})}},e.prototype._preparePlayerBeforeStart=function(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()},e.prototype._triggerWebAnimation=function(e,t,n){return e.animate(t,n)},e.prototype.onStart=function(e){this._onStartFns.push(e)},e.prototype.onDone=function(e){this._onDoneFns.push(e)},e.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},e.prototype.play=function(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0),this.domPlayer.play()},e.prototype.pause=function(){this.init(),this.domPlayer.pause()},e.prototype.finish=function(){this.init(),this._onFinish(),this.domPlayer.finish()},e.prototype.reset=function(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1},e.prototype._resetDomPlayerState=function(){this.domPlayer&&this.domPlayer.cancel()},e.prototype.restart=function(){this.reset(),this.play()},e.prototype.hasStarted=function(){return this._started},e.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},e.prototype.setPosition=function(e){this.domPlayer.currentTime=e*this.time},e.prototype.getPosition=function(){return this.domPlayer.currentTime/this.time},Object.defineProperty(e.prototype,"totalTime",{get:function(){return this._delay+this._duration},enumerable:!0,configurable:!0}),e.prototype.beforeDestroy=function(){var e=this,t={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(function(n){"offset"!=n&&(t[n]=e._finished?e._finalKeyframe[n]:Po(e.element,n))}),this.currentSnapshot=t},e.prototype.triggerCallback=function(e){var t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},e}(),pg=function(){function e(){}return e.prototype.validateStyleProperty=function(e){return Ji(e)},e.prototype.matchesElement=function(e,t){return ym(e,t)},e.prototype.containsElement=function(e,t){return vm(e,t)},e.prototype.query=function(e,t,n){return bm(e,t,n)},e.prototype.computeStyle=function(e,t,n){return window.getComputedStyle(e)[t]},e.prototype.animate=function(e,t,n,r,i,o){void 0===o&&(o=[]);var l={duration:n,delay:r,fill:0==r?"both":"forwards"};i&&(l.easing=i);var a=o.filter(function(e){return e instanceof dg});return new dg(e,t,l,a)},e}(),fg=function(e){function t(t,n){var r=e.call(this)||this;return r._nextAnimationId=0,r._renderer=t.createRenderer(n.body,{id:"0",encapsulation:al.ViewEncapsulation.None,styles:[],data:{animation:[]}}),r}return Object(bl.__extends)(t,e),t.prototype.build=function(e){var t=this._nextAnimationId.toString();this._nextAnimationId++;var n=Array.isArray(e)?Object(Rs.sequence)(e):e;return No(this._renderer,null,t,"register",[n]),new hg(t,this._renderer)},t}(Rs.AnimationBuilder),hg=function(e){function t(t,n){var r=e.call(this)||this;return r._id=t,r._renderer=n,r}return Object(bl.__extends)(t,e),t.prototype.create=function(e,t){return new mg(this._id,e,t||{},this._renderer)},t}(Rs.AnimationFactory),mg=function(){function e(e,t,n,r){this.id=e,this.element=t,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}return e.prototype._listen=function(e,t){return this._renderer.listen(this.element,"@@"+this.id+":"+e,t)},e.prototype._command=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return No(this._renderer,this.element,this.id,e,t)},e.prototype.onDone=function(e){this._listen("done",e)},e.prototype.onStart=function(e){this._listen("start",e)},e.prototype.onDestroy=function(e){this._listen("destroy",e)},e.prototype.init=function(){this._command("init")},e.prototype.hasStarted=function(){return this._started},e.prototype.play=function(){this._command("play"),this._started=!0},e.prototype.pause=function(){this._command("pause")},e.prototype.restart=function(){this._command("restart")},e.prototype.finish=function(){this._command("finish")},e.prototype.destroy=function(){this._command("destroy")},e.prototype.reset=function(){this._command("reset")},e.prototype.setPosition=function(e){this._command("setPosition",e)},e.prototype.getPosition=function(){return 0},e}(),gg=function(){function e(e,t,n){this.delegate=e,this.engine=t,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,t.onRemovalComplete=function(e,t){t&&t.parentNode(e)&&t.removeChild(e.parentNode,e)}}return e.prototype.createRenderer=function(e,t){var n=this,r=this.delegate.createRenderer(e,t);if(!(e&&t&&t.data&&t.data.animation)){var i=this._rendererCache.get(r);return i||(i=new yg("",r,this.engine),this._rendererCache.set(r,i)),i}var o=t.id,l=t.id+"-"+this._currentId;return this._currentId++,this.engine.register(l,e),t.data.animation.forEach(function(t){return n.engine.registerTrigger(o,l,e,t.name,t)}),new vg(this,l,r,this.engine)},e.prototype.begin=function(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()},e.prototype._scheduleCountTask=function(){var e=this;Zone.current.scheduleMicroTask("incremenet the animation microtask",function(){return e._microtaskId++})},e.prototype.scheduleListenerCallback=function(e,t,n){var r=this;e>=0&&e<this._microtaskId?this._zone.run(function(){return t(n)}):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(function(){r._zone.run(function(){r._animationCallbacksBuffer.forEach(function(e){(0,e[0])(e[1])}),r._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([t,n]))},e.prototype.end=function(){var e=this;this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(function(){e._scheduleCountTask(),e.engine.flush(e._microtaskId)}),this.delegate.end&&this.delegate.end()},e.prototype.whenRenderingDone=function(){return this.engine.whenRenderingDone()},e}(),yg=function(){function e(e,t,n){this.namespaceId=e,this.delegate=t,this.engine=n,this.destroyNode=this.delegate.destroyNode?function(e){return t.destroyNode(e)}:null}return Object.defineProperty(e.prototype,"data",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()},e.prototype.createElement=function(e,t){return this.delegate.createElement(e,t)},e.prototype.createComment=function(e){return this.delegate.createComment(e)},e.prototype.createText=function(e){return this.delegate.createText(e)},e.prototype.appendChild=function(e,t){this.delegate.appendChild(e,t),this.engine.onInsert(this.namespaceId,t,e,!1)},e.prototype.insertBefore=function(e,t,n){this.delegate.insertBefore(e,t,n),this.engine.onInsert(this.namespaceId,t,e,!0)},e.prototype.removeChild=function(e,t){this.engine.onRemove(this.namespaceId,t,this.delegate)},e.prototype.selectRootElement=function(e){return this.delegate.selectRootElement(e)},e.prototype.parentNode=function(e){return this.delegate.parentNode(e)},e.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},e.prototype.setAttribute=function(e,t,n,r){this.delegate.setAttribute(e,t,n,r)},e.prototype.removeAttribute=function(e,t,n){this.delegate.removeAttribute(e,t,n)},e.prototype.addClass=function(e,t){this.delegate.addClass(e,t)},e.prototype.removeClass=function(e,t){this.delegate.removeClass(e,t)},e.prototype.setStyle=function(e,t,n,r){this.delegate.setStyle(e,t,n,r)},e.prototype.removeStyle=function(e,t,n){this.delegate.removeStyle(e,t,n)},e.prototype.setProperty=function(e,t,n){"@"==t.charAt(0)&&"@.disabled"==t?this.disableAnimations(e,!!n):this.delegate.setProperty(e,t,n)},e.prototype.setValue=function(e,t){this.delegate.setValue(e,t)},e.prototype.listen=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.disableAnimations=function(e,t){this.engine.disableAnimations(e,t)},e}(),vg=function(e){function t(t,n,r,i){var o=e.call(this,n,r,i)||this;return o.factory=t,o.namespaceId=n,o}return Object(bl.__extends)(t,e),t.prototype.setProperty=function(e,t,n){"@"==t.charAt(0)?"."==t.charAt(1)&&"@.disabled"==t?this.disableAnimations(e,n=void 0===n||!!n):this.engine.process(this.namespaceId,e,t.substr(1),n):this.delegate.setProperty(e,t,n)},t.prototype.listen=function(e,t,n){var r=this;if("@"==t.charAt(0)){var i=function(e){switch(e){case"body":return document.body;case"document":return document;case"window":return window;default:return e}}(e),o=t.substr(1),l="";return"@"!=o.charAt(0)&&(o=(a=function(e){var t=e.indexOf(".");return[e.substring(0,t),e.substr(t+1)]}(o))[0],l=a[1]),this.engine.listen(this.namespaceId,i,o,l,function(e){r.factory.scheduleListenerCallback(e._data||-1,n,e)})}return this.delegate.listen(e,t,n);var a},t}(yg),bg=function(e){function t(t,n){return e.call(this,t,n)||this}return Object(bl.__extends)(t,e),t}(cg),_g=function(){},wg="success",xg=new al.InjectionToken("IndexedDBBackend"),Cg=new al.InjectionToken("IDB_SCHEMA"),Eg=function(){function e(e,t){this.changes=new ml.Subject,this._schema=t,this._idb=e}return e.prototype._mapRecord=function(e){return function(t){return e.primaryKey||(t.record.$key=t.$key),t.record}},e.prototype._upgradeDB=function(e,t){for(var n in this._schema.stores)t.objectStoreNames.contains(n)&&t.deleteObjectStore(n),this._createObjectStore(t,n,this._schema.stores[n]);e.next(t),e.complete()},e.prototype._createObjectStore=function(e,t,n){e.createObjectStore(t,{autoIncrement:!0,keyPath:n.primaryKey})},e.prototype.open=function(e,t,n){var r=this;void 0===t&&(t=1);var i=this._idb;return gl.a.create(function(t){var n=i.open(e,r._schema.version),o=function(e){t.next(e.target.result),t.complete()},l=function(e){console.log(e),t.error(e)},a=function(e){r._upgradeDB(t,e.target.result)};return n.addEventListener(wg,o),n.addEventListener("error",l),n.addEventListener("upgradeneeded",a),function(){n.removeEventListener(wg,o),n.removeEventListener("error",l),n.removeEventListener("upgradeneeded",a)}})},e.prototype.deleteDatabase=function(e){var t=this;return new gl.a(function(n){var r=t._idb.deleteDatabase(e),i=function(e){n.next(null),n.complete()},o=function(e){return n.error(e)};return r.addEventListener(wg,i),r.addEventListener("error",o),function(){r.removeEventListener(wg,i),r.removeEventListener("error",o)}})},e.prototype.insert=function(e,t,n){var r=this;void 0===n&&(n=!0);var i=this.executeWrite(e,"put",t);return function(e,t,n){return x(e,t,n)(this)}.call(i,function(e){return n?r.changes.next({type:"DB_INSERT",payload:e}):{}})},e.prototype.get=function(e,t){var n=this,r=this.open(this._schema.name);return jo.call(r,function(r){return new gl.a(function(i){n._mapRecord(n._schema.stores[e]);var o=r.transaction([e],"readonly"),l=o.objectStore(e).get(t),a=function(e){return i.error(e)},s=function(){return i.complete()},u=function(e){return i.next(l.result)};return o.addEventListener("complete",s),o.addEventListener("error",a),l.addEventListener(wg,u),l.addEventListener("error",a),function(){l.removeEventListener(wg,u),l.removeEventListener("error",a),o.removeEventListener("complete",s),o.removeEventListener("error",a)}})})},e.prototype.query=function(e,t){var n=this.open(this._schema.name);return jo.call(n,function(n){return new gl.a(function(r){var i=n.transaction([e],"readonly"),o=i.objectStore(e).openCursor(),l=function(e){return r.error(e)},a=function(e){var n=e.target.result;n?(t?t(n.value)&&r.next(n.value):r.next(n.value),n.continue()):r.complete()};return i.addEventListener("error",l),o.addEventListener(wg,a),o.addEventListener("error",l),function(){o.removeEventListener(wg,a),o.removeEventListener("error",l),i.removeEventListener("error",l)}})})},e.prototype.executeWrite=function(e,t,n){var r=this,i=this.open(this._schema.name);return jo.call(i,function(i){return new gl.a(function(o){var l=r._schema.stores[e],a=r._mapRecord(l),s=i.transaction([e],"readwrite"),u=s.objectStore(e),c=function(e){return o.error(e)},d=function(){return o.complete()};s.addEventListener("complete",d),s.addEventListener("error",c);var p=jo.call(Ds(n),function(e){return new gl.a(function(n){var r;if(l.primaryKey)r=u[t](e);else{var i=e.$key,o=Object.assign({},e);delete o.key,r=u[t](o,i)}r.addEventListener(wg,function(){n.next(a({$key:r.result,record:e}))}),r.addEventListener("error",function(e){n.error(e)})})}).subscribe(o);return function(){p.unsubscribe(),s.removeEventListener("complete",d),s.removeEventListener("error",c)}})})},e.prototype.compare=function(e,t){return this._idb.cmp(e,t)},e}(),Sg=function(){function e(){}return e.provideDB=function(t){return{ngModule:e,providers:[{provide:Cg,useValue:t}]}},e}(),Og=(n("5jKg"),n("PAZ8")),Tg=new al.InjectionToken("mat-autocomplete-scroll-strategy"),kg=function(){},Dg=new al.InjectionToken("mat-menu-default-options"),Ig=new al.InjectionToken("mat-menu-scroll-strategy"),Rg=function(){},Mg=new al.InjectionToken("mat-select-scroll-strategy"),Pg=function(){},Ng=function(){return function(){this.changes=new ml.Subject,this.itemsPerPageLabel="Items per page:",this.nextPageLabel="Next page",this.previousPageLabel="Previous page",this.getRangeLabel=function(e,t,n){if(0==n||0==t)return"0 of "+n;var r=e*t;return r+1+" - "+(r<(n=Math.max(n,0))?Math.min(r+t,n):r+t)+" of "+n}}}(),Ag=function(){},Lg=function(){return function(){this.changes=new ml.Subject,this.sortButtonLabel=function(e){return"Change sorting for "+e},this.sortDescriptionLabel=function(e,t){return"Sorted by "+e+" "+("asc"==t?"ascending":"descending")}}}(),Fg=function(){},jg=function(){},Vg=function(){return function(){this.changes=new ml.Subject,this.optionalLabel="Optional"}}(),zg=function(){},Bg=n("uIf7"),Hg=n("PR+T"),Wg=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new qg(e))},e}(),qg=function(e){function t(){e.apply(this,arguments)}return Object(bl.__extends)(t,e),t.prototype._next=function(e){Object(Hg.a)()},t}(Yl.a),Ug=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new Gg(e))},e}(),Gg=function(e){function t(t){e.call(this,t)}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.destination.next(Og.a.createNext(e))},t.prototype._error=function(e){var t=this.destination;t.next(Og.a.createError(e)),t.complete()},t.prototype._complete=function(){var e=this.destination;e.next(Og.a.createComplete()),e.complete()},t}(Yl.a),Kg=function(){function e(){this.size=0,this._values=[],this._keys=[]}return e.prototype.get=function(e){var t=this._keys.indexOf(e);return-1===t?void 0:this._values[t]},e.prototype.set=function(e,t){var n=this._keys.indexOf(e);return-1===n?(this._keys.push(e),this._values.push(t),this.size++):this._values[n]=t,this},e.prototype.delete=function(e){var t=this._keys.indexOf(e);return-1!==t&&(this._values.splice(t,1),this._keys.splice(t,1),this.size--,!0)},e.prototype.clear=function(){this._keys.length=0,this._values.length=0,this.size=0},e.prototype.forEach=function(e,t){for(var n=0;n<this.size;n++)e.call(t,this._values[n],this._keys[n])},e}(),$g=_s.a.Map||function(){return Kg}(),Zg=function(){function e(){this.values={}}return e.prototype.delete=function(e){return this.values[e]=null,!0},e.prototype.set=function(e,t){return this.values[e]=t,this},e.prototype.get=function(e){return this.values[e]},e.prototype.forEach=function(e,t){var n=this.values;for(var r in n)n.hasOwnProperty(r)&&null!==n[r]&&e.call(t,n[r],r)},e.prototype.clear=function(){this.values={}},e}(),Qg=function(){function e(e,t,n,r){this.keySelector=e,this.elementSelector=t,this.durationSelector=n,this.subjectSelector=r}return e.prototype.call=function(e,t){return t.subscribe(new Yg(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},e}(),Yg=function(e){function t(t,n,r,i,o){e.call(this,t),this.keySelector=n,this.elementSelector=r,this.durationSelector=i,this.subjectSelector=o,this.groups=null,this.attemptedToUnsubscribe=!1,this.count=0}return Object(bl.__extends)(t,e),t.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){return void this.error(e)}this._group(e,t)},t.prototype._group=function(e,t){var n=this.groups;n||(n=this.groups="string"==typeof t?new Zg:new $g);var r,i=n.get(t);if(this.elementSelector)try{r=this.elementSelector(e)}catch(e){this.error(e)}else r=e;if(!i){i=this.subjectSelector?this.subjectSelector():new ml.Subject,n.set(t,i);var o=new Jg(t,i,this);if(this.destination.next(o),this.durationSelector){var l=void 0;try{l=this.durationSelector(new Jg(t,i))}catch(e){return void this.error(e)}this.add(l.subscribe(new Xg(t,i,this)))}}i.closed||i.next(r)},t.prototype._error=function(e){var t=this.groups;t&&(t.forEach(function(t,n){t.error(e)}),t.clear()),this.destination.error(e)},t.prototype._complete=function(){var e=this.groups;e&&(e.forEach(function(e,t){e.complete()}),e.clear()),this.destination.complete()},t.prototype.removeGroup=function(e){this.groups.delete(e)},t.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&e.prototype.unsubscribe.call(this))},t}(Yl.a),Xg=function(e){function t(t,n,r){e.call(this,n),this.key=t,this.group=n,this.parent=r}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.complete()},t.prototype._unsubscribe=function(){var e=this.parent,t=this.key;this.key=this.parent=null,e&&e.removeGroup(t)},t}(Yl.a),Jg=function(e){function t(t,n,r){e.call(this),this.key=t,this.groupSubject=n,this.refCountSubscription=r}return Object(bl.__extends)(t,e),t.prototype._subscribe=function(e){var t=new Cl.a,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&t.add(new ey(n)),t.add(r.subscribe(e)),t},t}(gl.a),ey=function(e){function t(t){e.call(this),this.parent=t,t.count++}return Object(bl.__extends)(t,e),t.prototype.unsubscribe=function(){var t=this.parent;t.closed||this.closed||(e.prototype.unsubscribe.call(this),t.count-=1,0===t.count&&t.attemptedToUnsubscribe&&t.unsubscribe())},t}(Cl.a),ty=function(){function e(e,t){this.project=e,this.resultSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new ny(e,this.project,this.resultSelector))},e}(),ny=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.resultSelector=r,this.hasSubscription=!1,this.hasCompleted=!1,this.index=0}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.hasSubscription||this.tryNext(e)},t.prototype.tryNext=function(e){var t=this.index++,n=this.destination;try{var r=this.project(e,t);this.hasSubscription=!0,this.add(Object(Dl.a)(this,r,e,t))}catch(e){n.error(e)}},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){var o=this.destination;this.resultSelector?this.trySelectResult(e,t,n,r):o.next(t)},t.prototype.trySelectResult=function(e,t,n,r){var i=this.resultSelector,o=this.destination;try{var l=i(e,t,n,r);o.next(l)}catch(e){o.error(e)}},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.remove(e),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(kl.a),ry=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new iy(e))},e}(),iy=function(e){function t(t){e.call(this,t)}return Object(bl.__extends)(t,e),t.prototype._next=function(e){e.observe(this.destination)},t}(Yl.a),oy=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ly="__@ngrx/effects__",ay=Object(Yp.x)(function(e){return e.constructor[ly]||[]},Go),sy="ngrxOnRunEffects",uy=function(e){function t(t){var n=e.call(this)||this;return t&&(n.source=t),n}return oy(t,e),t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.ofType=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return ru.a.call(this,function(t){return e.some(function(e){return e===t.type})})},t}(gl.a),cy=(new al.InjectionToken("ngrx/effects: Immediate Effects"),new al.InjectionToken("ngrx/effects: Root Effects")),dy=(new al.InjectionToken("ngrx/effects: Feature Effects"),new al.InjectionToken("Browser Console")),py=function(){function e(e){this.console=e}return e.prototype.report=function(e,t){this.console.group(e);for(var n in t)this.console.error(n+":",t[n]);this.console.groupEnd()},e}(),fy=function(e){function t(t){var n=e.call(this)||this;return n.errorReporter=t,n}return oy(t,e),t.prototype.addEffects=function(e){this.next(e)},t.prototype.toActions=function(){var e=this;return jo.call(function(e,t,n,r){return function(e,t,n,r){return function(i){return i.lift(new Qg(e,t,n,r))}}(e,t,n,r)(this)}.call(this,Go),function(t){return function(){return function(e){return e.lift(new ry)}(this)}.call(ru.a.call(iu.a.call(function(e,t){return function(e,t){return function(n){return n.lift(new ty(e,t))}}(e,t)(this)}.call(t,Ko),function(t){return function(e,t){!function(e,t){if("E"===e.notification.kind){var n="Effect "+$o(e)+" threw an error";t.report(n,{Source:e.sourceInstance,Effect:e.effect,Error:e.notification.error,Notification:e.notification})}}(e,t),function(e,t){if("N"===e.notification.kind){var n=e.notification.value;if(!n||!n.type||"string"!=typeof n.type){var r="Effect "+$o(e)+" dispatched an invalid action";t.report(r,{Source:e.sourceInstance,Effect:e.effect,Dispatched:n,Notification:e.notification})}}}(e,t)}(t,e.errorReporter),t.notification}),function(e){return"N"===e.kind}))})},t}(ml.Subject),hy=function(){function e(e,t){this.effectSources=e,this.store=t,this.effectsSubscription=null}return e.prototype.start=function(){this.effectsSubscription||(this.effectsSubscription=this.effectSources.toActions().subscribe(this.store))},e.prototype.ngOnDestroy=function(){this.effectsSubscription&&(this.effectsSubscription.unsubscribe(),this.effectsSubscription=null)},e}(),my="@ngrx/effects/init",gy=function(){function e(e,t,n,r,i){this.sources=e,t.start(),r.forEach(function(t){return e.addEffects(t)}),n.dispatch({type:my})}return e.prototype.addEffects=function(e){this.sources.addEffects(e)},e}(),yy={loaded:!1,loading:!1,dataverses:[],createDataverse:[],createDataverseName:"",createDataverseError:[],createDataverseSuccess:!1,createDataverseFailed:!1,dropDataverse:[],dropDataverseName:"",dropDataverseError:[],dropDataverseSuccess:!1,dropDataverseFailed:!1},vy={loaded:!1,loading:!1,datasets:[],createDataset:[],createDatasetError:[],createDatasetSuccess:!1,createDatasetFailed:!1,dropDataset:[],dropDatasetError:[],dropDatasetSuccess:!1,dropDatasetFailed:!1,guideSelectsDataset:""},by={loaded:!1,loading:!1,datatypes:[],createDatatype:[],createDatatypeError:[],createDatatypeSuccess:!1,createDatatypeFailed:!1,dropDatatype:[],dropDatatypeError:[],dropDatatypeSuccess:!1,dropDatatypeFailed:!1},_y={loaded:!1,loading:!1,indexes:[],createIndex:[],createIndexError:[],createIndexSuccess:!1,createIndexFailed:!1,dropIndex:[],dropIndexError:[],dropIndexSuccess:!1,dropIndexFailed:!1},wy={loading:!1,loaded:!1,success:!1,sqlQueryString:"",sqlQueryResult:[],sqlQueryError:[]},xy={loading:!1,loaded:!1,success:!1,sqlQueryMetadataString:"",sqlQueryMetadataResult:[],sqlQueryMetadataError:[]},Cy={tree:[],loading:!1,loaded:!1};gl.a.from=Ds;var Ey=function(){function e(e,t){var n=this;this.store=e,this.ref=t,this.dv=[],this.ds=[],this.dt=[],this.idx=[],this.store.select(function(e){return e.dataverse.dataverses}).subscribe(function(e){if(e.results){n.dv=[];for(var t=0;t<e.results.length;t++){var r={id:0,DataverseName:"",Datasets:[]};r.id=t,r.DataverseName=e.results[t].DataverseName,n.dv.push(r)}n.updateMetadataTree()}}),this.store.select(function(e){return e.dataset.datasets}).subscribe(function(e){e.results&&(n.ds=e.results,n.updateMetadataTree())}),this.store.select(function(e){return e.datatype.datatypes}).subscribe(function(e){e.results&&(n.dt=e.results,n.updateMetadataTree())}),this.store.select(function(e){return e.index.indexes}).subscribe(function(e){e.results&&(n.idx=e.results,n.updateMetadataTree())})}return e.prototype.getMetadataTree=function(){return gl.a.from(this.dv)},e.prototype.updateMetadataTree=function(){for(var e=0;e<this.dv.length;e++){this.dv[e].Datasets=[];for(var t=0;t<this.ds.length;t++)if(this.ds[t].DataverseName===this.dv[e].DataverseName){this.ds[t].Datatype=[];for(var n=0;n<this.dt.length;n++)this.dt[n].DatatypeName===this.ds[t].DatatypeName&&(this.ds[t].Datatype=this.dt[n]);this.ds[t].Indexes=[];for(var r=0;r<this.idx.length;r++)this.idx[r].DatasetName===this.ds[t].DatasetName&&this.ds[t].Indexes.push(this.idx[r]);this.dv[e].Datasets.push(this.ds[t])}}this.store.dispatch(new Jh)},e}(),Sy=n("GpNi");gl.a.prototype.switchMap=Sy.a,gl.a.prototype.catch=il,gl.a.prototype._catch=il;var Oy=function(){function e(e,t){var n=this;this.actions=e,this.metadataService=t,this.calculateDBTree$=this.actions.ofType(Yh).switchMap(function(){return n.metadataService.getMetadataTree().map(function(e){return new em(e)})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"calculateDBTree$",void 0),e}(),Ty=function(){function e(e){this.http=e}return e.prototype.selectDataverses=function(){return this.executeSQLQuery("SELECT VALUE dv FROM Metadata.`Dataverse` dv")},e.prototype.selectDatasets=function(){return this.executeSQLQuery("SELECT VALUE ds FROM Metadata.`Dataset` ds")},e.prototype.selectDatatypes=function(){return this.executeSQLQuery("SELECT VALUE dt FROM Metadata.`Datatype` dt")},e.prototype.selectIndexes=function(){return this.executeSQLQuery("SELECT VALUE ix FROM Metadata.`Index` ix")},e.prototype.createDataverse=function(e){return this.executeDDLSQLQuery("CREATE DATAVERSE "+e+";")},e.prototype.dropDataverse=function(e){return this.executeDDLSQLQuery("DROP DATAVERSE "+e)},e.prototype.createDataset=function(e){return this.executeDDLSQLQuery("CREATE DATASET "+e+";")},e.prototype.dropDataset=function(e){return this.executeDDLSQLQuery("DROP DATASET "+e)},e.prototype.createDatatype=function(e){return this.executeDDLSQLQuery("CREATE DATATYPE "+e+";")},e.prototype.dropDatatype=function(e){return this.executeDDLSQLQuery("DROP TYPE "+e)},e.prototype.createIndex=function(e){return this.executeDDLSQLQuery("CREATE INDEX "+e+";")},e.prototype.dropIndex=function(e){return this.executeDDLSQLQuery("DROP INDEX "+e)},e.prototype.executeDDLSQLQuery=function(e){var t=this;return this.http.post("http://localhost:19002/query/service",{statement:e}).map(function(e){return e}).catch(function(e){return t.handleExecuteQueryError(e)})},e.prototype.executeSQLQuery=function(e){var t=this;return this.http.post("http://localhost:19002/query/service",{statement:e}).map(function(e){return e}).catch(function(e){return t.handleExecuteQueryError(e)})},e.prototype.handleExecuteQueryError=function(e){return console.log(e),Promise.reject(e.error||e)},e}(),ky=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectDataverses$=this.actions.ofType(Ad).switchMap(function(e){return n.sqlService.selectDataverses().map(function(e){return new qd(e)}).catch(function(e){return vl(new Ud(e))})}),this.createDataverses$=this.actions.ofType(Fd).switchMap(function(e){return n.sqlService.createDataverse(e.payload).map(function(e){return new Kd(e)}).catch(function(e){return vl(new $d(e))})}),this.dropDataverses$=this.actions.ofType(zd).switchMap(function(e){return n.sqlService.dropDataverse(e.payload).map(function(e){return new Qd(e)}).catch(function(e){return vl(new Yd(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectDataverses$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createDataverses$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropDataverses$",void 0),e}(),Dy=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectDatasets$=this.actions.ofType(Xd).switchMap(function(e){return n.sqlService.selectDatasets().map(function(e){return new up(e)}).catch(function(e){return vl(new cp(e))})}),this.createDatasets$=this.actions.ofType(ep).switchMap(function(e){return n.sqlService.createDataset(e.payload).map(function(e){return new pp(e)}).catch(function(e){return vl(new fp(e))})}),this.dropDatasets$=this.actions.ofType(rp).switchMap(function(e){return console.log(e.payload),n.sqlService.dropDataset(e.payload).map(function(e){return new mp(e)}).catch(function(e){return vl(new gp(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectDatasets$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createDatasets$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropDatasets$",void 0),e}(),Iy=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectDatatypes$=this.actions.ofType(yp).switchMap(function(e){return n.sqlService.selectDatatypes().map(function(e){return new Op(e)}).catch(function(e){return vl(new Tp(e))})}),this.createDatatypes$=this.actions.ofType(bp).switchMap(function(e){return n.sqlService.createDatatype(e.payload).map(function(e){return new Dp(e)}).catch(function(e){return vl(new Ip(e))})}),this.dropDatatypes$=this.actions.ofType(xp).switchMap(function(e){return n.sqlService.dropDatatype(e.payload).map(function(e){return new Mp(e)}).catch(function(e){return vl(new Pp(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectDatatypes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createDatatypes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropDatatypes$",void 0),e}(),Ry=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectIndexes$=this.actions.ofType(Np).switchMap(function(e){return n.sqlService.selectIndexes().map(function(e){return new Hp(e)}).catch(function(e){return vl(new Wp(e))})}),this.createIndexes$=this.actions.ofType(Lp).switchMap(function(e){return n.sqlService.createIndex(e.payload).map(function(e){return new Up(e)}).catch(function(e){return vl(new Gp(e))})}),this.dropIndexes$=this.actions.ofType(jp).switchMap(function(e){return n.sqlService.dropIndex(e.payload).map(function(e){return new $p(e)}).catch(function(e){return vl(new Zp(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectIndexes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createIndexes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropIndexes$",void 0),e}(),My=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.executeQuery$=this.actions.ofType(Cd).switchMap(function(e){return n.sqlService.executeSQLQuery(e.payload).map(function(e){return new Id(e)}).catch(function(e){return vl(new Rd(e))})}),this.executeMetadataQuery$=this.actions.ofType(Od).switchMap(function(e){return n.sqlService.executeSQLQuery(e.payload).map(function(e){return new Pd(e)}).catch(function(e){return vl(new Nd(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"executeQuery$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"executeMetadataQuery$",void 0),e}(),Py=function(){},Ny=function(){},Ay=function(){},Ly=function(){},Fy=function(){},jy=function(){},Vy=function(){},zy=function(){},By=function(){},Hy=new al.InjectionToken("MAT_DRAWER_DEFAULT_AUTOSIZE"),Wy=function(){},qy=function(){},Uy=function(){},Gy=function(){},Ky=al["\u0275cmf"](sl,[ul],function(e){return al["\u0275mod"]([al["\u0275mpd"](512,al.ComponentFactoryResolver,al["\u0275CodegenComponentFactoryResolver"],[[8,[Us,sc,gc,Pc,Ac,uf,df,bf,wf,Df,Rf,Vf,Bf,um]],[3,al.ComponentFactoryResolver],al.NgModuleRef]),al["\u0275mpd"](5120,al.LOCALE_ID,al["\u0275m"],[[3,al.LOCALE_ID]]),al["\u0275mpd"](4608,cl.NgLocalization,cl.NgLocaleLocalization,[al.LOCALE_ID,[2,cl["\u0275a"]]]),al["\u0275mpd"](4608,Fu["\u0275i"],Fu["\u0275i"],[]),al["\u0275mpd"](4608,al.Compiler,al.Compiler,[]),al["\u0275mpd"](5120,al.APP_ID,al["\u0275f"],[]),al["\u0275mpd"](5120,al.IterableDiffers,al["\u0275k"],[]),al["\u0275mpd"](5120,al.KeyValueDiffers,al["\u0275l"],[]),al["\u0275mpd"](4608,Va.c,Va.r,[cl.DOCUMENT]),al["\u0275mpd"](6144,al.Sanitizer,null,[Va.c]),al["\u0275mpd"](4608,Va.f,ns,[[2,ts],[2,Ba]]),al["\u0275mpd"](5120,Va.d,function(e,t,n,r,i){return[new Va.k(e,t),new Va.o(n),new Va.n(r,i)]},[cl.DOCUMENT,al.NgZone,cl.DOCUMENT,cl.DOCUMENT,Va.f]),al["\u0275mpd"](4608,Va.e,Va.e,[Va.d,al.NgZone]),al["\u0275mpd"](135680,Va.m,Va.m,[cl.DOCUMENT]),al["\u0275mpd"](4608,Va.l,Va.l,[Va.e,Va.m]),al["\u0275mpd"](5120,wm,Ao,[]),al["\u0275mpd"](5120,Hm,Lo,[]),al["\u0275mpd"](4608,cg,bg,[wm,Hm]),al["\u0275mpd"](5120,al.RendererFactory2,Fo,[Va.l,cg,al.NgZone]),al["\u0275mpd"](6144,Va.p,null,[Va.m]),al["\u0275mpd"](4608,al.Testability,al.Testability,[al.NgZone]),al["\u0275mpd"](4608,Va.h,Va.h,[cl.DOCUMENT]),al["\u0275mpd"](4608,Va.i,Va.i,[cl.DOCUMENT]),al["\u0275mpd"](4608,Rs.AnimationBuilder,fg,[al.RendererFactory2,Va.b]),al["\u0275mpd"](5120,xg,Vo,[]),al["\u0275mpd"](4608,Eg,Eg,[xg,Cg]),al["\u0275mpd"](6144,zl,null,[cl.DOCUMENT]),al["\u0275mpd"](4608,Bl,Bl,[[2,zl]]),al["\u0275mpd"](4608,pl,pl,[]),al["\u0275mpd"](5120,Fl,l,[[3,Fl],al.NgZone,pl]),al["\u0275mpd"](5120,jl,a,[[3,jl],pl,al.NgZone]),al["\u0275mpd"](4608,aa,aa,[Fl,jl,al.NgZone]),al["\u0275mpd"](5120,fa,v,[[3,fa],cl.DOCUMENT]),al["\u0275mpd"](4608,da,da,[jl,cl.DOCUMENT]),al["\u0275mpd"](5120,pa,y,[[3,pa],cl.DOCUMENT]),al["\u0275mpd"](4608,ga,ga,[aa,fa,al.ComponentFactoryResolver,da,pa,al.ApplicationRef,al.Injector,al.NgZone,cl.DOCUMENT]),al["\u0275mpd"](5120,ya,b,[ga]),al["\u0275mpd"](5120,Tg,zo,[ga]),al["\u0275mpd"](4608,Ea,Ea,[pl]),al["\u0275mpd"](4608,Oa,Oa,[Ea,al.NgZone,cl.DOCUMENT]),al["\u0275mpd"](136192,Pa,O,[[3,Pa],cl.DOCUMENT]),al["\u0275mpd"](5120,Aa,T,[[3,Aa],[2,Na],cl.DOCUMENT]),al["\u0275mpd"](5120,La,k,[[3,La],al.NgZone,pl]),al["\u0275mpd"](5120,Vc,xe,[[3,Vc]]),al["\u0275mpd"](4608,qf,qf,[]),al["\u0275mpd"](4608,es,es,[]),al["\u0275mpd"](5120,Ls,A,[ga]),al["\u0275mpd"](4608,Fs,Fs,[ga,al.Injector,[2,cl.Location],Ls,[3,Fs]]),al["\u0275mpd"](5120,Nu,K,[[3,Nu],[2,gu],Va.c]),al["\u0275mpd"](4608,Ku,Ku,[]),al["\u0275mpd"](5120,Ju,X,[ga]),al["\u0275mpd"](5120,Ig,Bo,[ga]),al["\u0275mpd"](5120,Mg,Ho,[ga]),al["\u0275mpd"](5120,pc,he,[ga]),al["\u0275mpd"](5120,Ng,Wo,[[3,Ng]]),al["\u0275mpd"](4608,xc,xc,[pl]),al["\u0275mpd"](135680,Cc,Cc,[xc,al.NgZone]),al["\u0275mpd"](4608,Ic,Ic,[ga,Aa,al.Injector,Cc,[3,Ic]]),al["\u0275mpd"](5120,Lg,qo,[[3,Lg]]),al["\u0275mpd"](4608,Vg,Vg,[]),al["\u0275mpd"](6144,Ha,null,[al.LOCALE_ID]),al["\u0275mpd"](4608,Wa,Qa,[[2,Ha]]),al["\u0275mpd"](135680,Yp.k,Yp.k,[Yp.a,Yp.i,Yp.j,Yp.d]),al["\u0275mpd"](5120,Bg.c,Bg.d,[Bg.k,Bg.i]),al["\u0275mpd"](4608,am,am,[Yp.m]),al["\u0275mpd"](512,cl.CommonModule,cl.CommonModule,[]),al["\u0275mpd"](512,ah.SharedModule,ah.SharedModule,[]),al["\u0275mpd"](512,lh.TreeModule,lh.TreeModule,[]),al["\u0275mpd"](512,Oh.DropdownModule,Oh.DropdownModule,[]),al["\u0275mpd"](512,Fu["\u0275ba"],Fu["\u0275ba"],[]),al["\u0275mpd"](512,Fu.FormsModule,Fu.FormsModule,[]),al["\u0275mpd"](512,Th.PaginatorModule,Th.PaginatorModule,[]),al["\u0275mpd"](512,Sh.DataTableModule,Sh.DataTableModule,[]),al["\u0275mpd"](1024,al.ErrorHandler,Va.q,[]),al["\u0275mpd"](1024,al.APP_INITIALIZER,function(e){return[Va.t(e)]},[[2,al.NgProbeToken]]),al["\u0275mpd"](512,al.ApplicationInitStatus,al.ApplicationInitStatus,[[2,al.APP_INITIALIZER]]),al["\u0275mpd"](131584,al.ApplicationRef,al.ApplicationRef,[al.NgZone,al["\u0275Console"],al.Injector,al.ErrorHandler,al.ComponentFactoryResolver,al.ApplicationInitStatus]),al["\u0275mpd"](512,al.ApplicationModule,al.ApplicationModule,[al.ApplicationRef]),al["\u0275mpd"](512,Va.a,Va.a,[[3,Va.a]]),al["\u0275mpd"](512,_g,_g,[]),al["\u0275mpd"](512,Sg,Sg,[]),al["\u0275mpd"](1024,dy,Qo,[]),al["\u0275mpd"](512,py,py,[dy]),al["\u0275mpd"](512,fy,fy,[py]),al["\u0275mpd"](131584,Bg.h,Bg.h,[]),al["\u0275mpd"](131584,Yp.a,Yp.a,[]),al["\u0275mpd"](2048,Yp.h,null,[Bg.h]),al["\u0275mpd"](256,Yp.r,void 0,[]),al["\u0275mpd"](1024,Yp.d,Yp.v,[Yp.r]),al["\u0275mpd"](256,Yp.q,{dataverse:Yo,dataset:Xo,datatype:Jo,index:el,sqlQuery:tl,sqlMetadataQuery:nl,metadata:rl},[]),al["\u0275mpd"](2048,Yp.t,null,[Yp.q]),al["\u0275mpd"](1024,Yp.c,Yp.u,[al.Injector,Yp.q,Yp.t]),al["\u0275mpd"](256,Yp.s,Yp.w,[]),al["\u0275mpd"](256,Yp.e,[],[]),al["\u0275mpd"](1024,Yp.f,Yp.y,[Yp.s,Yp.e]),al["\u0275mpd"](131584,Yp.g,Yp.g,[Yp.h,Yp.d,Yp.c,Yp.f]),al["\u0275mpd"](2048,Yp.i,null,[Yp.g]),al["\u0275mpd"](1024,Bg.k,Bg.e,[]),al["\u0275mpd"](512,Bg.l,Bg.l,[Bg.k]),al["\u0275mpd"](131584,Yp.j,Yp.j,[]),al["\u0275mpd"](256,Bg.j,{maxAge:10},[]),al["\u0275mpd"](1024,Bg.i,Bg.g,[Bg.j]),al["\u0275mpd"](512,Bg.a,Bg.a,[Bg.h,Yp.a,Yp.i,Bg.l,Yp.j,Yp.d,Bg.i]),al["\u0275mpd"](1024,Yp.l,Bg.f,[Bg.a]),al["\u0275mpd"](512,Yp.m,Yp.m,[Yp.l,Yp.a,Yp.g]),al["\u0275mpd"](131584,hy,hy,[fy,Yp.m]),al["\u0275mpd"](512,uy,uy,[Yp.j]),al["\u0275mpd"](512,Ey,Ey,[Yp.m,al.ApplicationRef]),al["\u0275mpd"](512,Oy,Oy,[uy,Ey]),al["\u0275mpd"](512,xu,xu,[]),al["\u0275mpd"](2048,wu,null,[xu]),al["\u0275mpd"](512,Cu,Cu,[wu]),al["\u0275mpd"](2048,lu,null,[Cu]),al["\u0275mpd"](256,Eu,"XSRF-TOKEN",[]),al["\u0275mpd"](512,Ou,Tu,[cl.DOCUMENT,al.PLATFORM_ID,Eu]),al["\u0275mpd"](256,Su,"X-XSRF-TOKEN",[]),al["\u0275mpd"](512,ku,ku,[Ou,Su]),al["\u0275mpd"](1024,vu,function(e){return[e]},[ku]),al["\u0275mpd"](1024,ou,q,[lu,[2,vu]]),al["\u0275mpd"](512,gu,gu,[ou]),al["\u0275mpd"](512,Ty,Ty,[gu]),al["\u0275mpd"](512,ky,ky,[uy,Ty]),al["\u0275mpd"](512,Dy,Dy,[uy,Ty]),al["\u0275mpd"](512,Iy,Iy,[uy,Ty]),al["\u0275mpd"](512,Ry,Ry,[uy,Ty]),al["\u0275mpd"](512,My,My,[uy,Ty]),al["\u0275mpd"](1024,cy,Zo,[Oy,ky,Dy,Iy,Ry,My]),al["\u0275mpd"](512,gy,gy,[fy,hy,Yp.m,cy,[2,Yp.n]]),al["\u0275mpd"](512,Du,Du,[]),al["\u0275mpd"](512,Iu,Iu,[]),al["\u0275mpd"](512,Hl,Hl,[]),al["\u0275mpd"](256,za,!0,[]),al["\u0275mpd"](512,Ba,Ba,[[2,za]]),al["\u0275mpd"](512,hl,hl,[]),al["\u0275mpd"](512,us,us,[]),al["\u0275mpd"](512,cs,cs,[]),al["\u0275mpd"](512,ds,ds,[]),al["\u0275mpd"](512,Zl,Zl,[]),al["\u0275mpd"](512,Vl,Vl,[]),al["\u0275mpd"](512,va,va,[]),al["\u0275mpd"](512,kg,kg,[]),al["\u0275mpd"](512,ja,ja,[]),al["\u0275mpd"](512,Qs,Qs,[]),al["\u0275mpd"](512,Gh,Gh,[]),al["\u0275mpd"](512,md,md,[]),al["\u0275mpd"](512,Gf,Gf,[]),al["\u0275mpd"](512,Py,Py,[]),al["\u0275mpd"](512,Ny,Ny,[]),al["\u0275mpd"](512,Yc,Yc,[]),al["\u0275mpd"](512,sd,sd,[]),al["\u0275mpd"](512,Ws,Ws,[]),al["\u0275mpd"](512,Lu,Lu,[]),al["\u0275mpd"](512,tc,tc,[]),al["\u0275mpd"](512,Ay,Ay,[]),al["\u0275mpd"](512,Ly,Ly,[]),al["\u0275mpd"](512,Bu,Bu,[]),al["\u0275mpd"](512,rs,rs,[]),al["\u0275mpd"](512,Fy,Fy,[]),al["\u0275mpd"](512,Gu,Gu,[]),al["\u0275mpd"](512,jy,jy,[]),al["\u0275mpd"](512,Rg,Rg,[]),al["\u0275mpd"](512,Pg,Pg,[]),al["\u0275mpd"](512,hc,hc,[]),al["\u0275mpd"](512,Ag,Ag,[]),al["\u0275mpd"](512,Vy,Vy,[]),al["\u0275mpd"](512,zy,zy,[]),al["\u0275mpd"](512,By,By,[]),al["\u0275mpd"](512,Wy,Wy,[]),al["\u0275mpd"](512,qy,qy,[]),al["\u0275mpd"](512,Uy,Uy,[]),al["\u0275mpd"](512,Ec,Ec,[]),al["\u0275mpd"](512,Rc,Rc,[]),al["\u0275mpd"](512,Fg,Fg,[]),al["\u0275mpd"](512,jg,jg,[]),al["\u0275mpd"](512,zg,zg,[]),al["\u0275mpd"](512,th,th,[]),al["\u0275mpd"](512,vd,vd,[]),al["\u0275mpd"](512,Xa,Xa,[]),al["\u0275mpd"](512,Ja,Ja,[]),al["\u0275mpd"](512,Gy,Gy,[]),al["\u0275mpd"](512,Yp.o,Yp.o,[Yp.a,Yp.i,Yp.j]),al["\u0275mpd"](512,Bg.b,Bg.b,[]),al["\u0275mpd"](512,sl,sl,[]),al["\u0275mpd"](256,Cg,{version:1,name:"asterixDB_app",stores:{}},[]),al["\u0275mpd"](256,Dg,{overlapTrigger:!0,xPosition:"after",yPosition:"below"},[]),al["\u0275mpd"](256,Hy,!1,[]),al["\u0275mpd"](256,qa,Ya,[])])});Object(al.enableProdMode)(),Va.j().bootstrapModuleFactory(Ky).catch(function(e){return console.log(e)})},"cpZ/":function(e,t,n){"use strict";var r=n("ptrv"),i=n("CDXM"),o=n("lfBE"),l=n("pBmS"),a=n("xI8H"),s=n("p/bR"),u=n("Lcie"),c=n("JXkd"),d=n("umMR"),p=n("UlVq"),f=n("P6IN"),h=n("Ula3");e.exports=function(e,t,n,m,g,y){var v=r[e],b=v,_=g?"set":"add",w=b&&b.prototype,x={},C=function(e){var t=w[e];o(w,e,"delete"==e?function(e){return!(y&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(y&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return y&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof b&&(y||w.forEach&&!d(function(){(new b).entries().next()}))){var E=new b,S=E[_](y?{}:-0,1)!=E,O=d(function(){E.has(1)}),T=p(function(e){new b(e)}),k=!y&&d(function(){for(var e=new b,t=5;t--;)e[_](t,t);return!e.has(-0)});T||((b=t(function(t,n){u(t,b,e);var r=h(new v,t,b);return void 0!=n&&s(n,g,r[_],r),r})).prototype=w,w.constructor=b),(O||k)&&(C("delete"),C("has"),g&&C("get")),(k||S)&&C(_),y&&w.clear&&delete w.clear}else b=m.getConstructor(t,e,g,_),l(b.prototype,n),a.NEED=!0;return f(b,e),x[e]=b,i(i.G+i.W+i.F*(b!=v),x),y||m.setStrong(b,e,g),b}},"dXJ/":function(e,t,n){var r=n("VceJ"),i=n("3r0D")("toStringTag"),o="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,l;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),i))?n:o?r(t):"Object"==(l=r(t))&&"function"==typeof t.callee?"Arguments":l}},"dmC+":function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("qqDE")},eFQL:function(e,t,n){(function(e){!function(){"use strict";function t(e,t){for(var n=e.length-1;n>=0;n--)typeof e[n]===v&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function n(e){return!e||!1!==e.writable&&(typeof e.get!==v||typeof e.set!==b)}function r(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n&&Object.getOwnPropertyDescriptor(n,t)&&(r={enumerable:!0,configurable:!0}),r&&r.configurable){delete r.writable,delete r.value;var i=r.get,o=t.substr(2),l=S[o];l||(l=S[o]=g("ON_PROPERTY"+o)),r.set=function(t){var n=this;n||e!==y||(n=y),n&&(n[l]&&n.removeEventListener(o,O),"function"==typeof t?(n[l]=t,n.addEventListener(o,O,!1)):n[l]=null)},r.get=function(){var n=this;if(n||e!==y||(n=y),!n)return null;var o=n[l];if(o)return o;if(i){var a=i&&i.apply(this);if(a)return r.set.apply(this,[a]),typeof n[_]===v&&n.removeAttribute(t),a}return null},Object.defineProperty(e,t,r)}}function i(e,t,n){if(t)for(var i=0;i<t.length;i++)r(e,"on"+t[i],n);else{var o=[];for(var l in e)"on"==l.substr(0,2)&&o.push(l);for(var a=0;a<o.length;a++)r(e,o[a],n)}}function o(e){var n=y[e];if(n){y[g(e)]=n,y[e]=function(){var r=t(arguments,e);switch(r.length){case 0:this[T]=new n;break;case 1:this[T]=new n(r[0]);break;case 2:this[T]=new n(r[0],r[1]);break;case 3:this[T]=new n(r[0],r[1],r[2]);break;case 4:this[T]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},a(y[e],n);var r,i=new n(function(){});for(r in i)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof i[t]?y[e].prototype[t]=function(){return this[T][t].apply(this[T],arguments)}:Object.defineProperty(y[e].prototype,t,{set:function(n){"function"==typeof n?(this[T][t]=Zone.current.wrap(n,e+"."+t),a(this[T][t],n)):this[T][t]=n},get:function(){return this[T][t]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(y[e][r]=n[r])}}function l(e,t,r){for(var i=e;i&&!i.hasOwnProperty(t);)i=Object.getPrototypeOf(i);!i&&e[t]&&(i=e);var o,l=g(t);if(i&&!(o=i[l])&&(o=i[l]=i[t],n(i&&Object.getOwnPropertyDescriptor(i,t)))){var s=r(o,l,t);i[t]=function(){return s(this,arguments)},a(i[t],o)}return o}function a(e,t){e[g("OriginalDelegate")]=t}function s(e,t,n){function r(t,n){if(!t)return!1;var r=!0;n&&void 0!==n.useGlobalCallback&&(r=n.useGlobalCallback);var h=n&&n.validateHandler,v=!0;n&&void 0!==n.checkDuplicate&&(v=n.checkDuplicate);var b=!1;n&&void 0!==n.returnTarget&&(b=n.returnTarget);for(var _=t;_&&!_.hasOwnProperty(i);)_=Object.getPrototypeOf(_);if(!_&&t[i]&&(_=t),!_)return!1;if(_[c])return!1;var w,x={},C=_[c]=_[i],E=_[g(o)]=_[o],S=_[g(l)]=_[l],O=_[g(s)]=_[s];n&&n.prependEventListenerFnName&&(w=_[g(n.prependEventListenerFnName)]=_[n.prependEventListenerFnName]);var T=r?function(e){if(!e.isRemoved){var t=A[e.eventName],n=void 0;t&&(n=t[e.capture?M:P]);var r=n&&e.target[n];if(r)for(var i=0;i<r.length;i++)if(r[i]===e){r.splice(i,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return E.apply(e.target,[e.eventName,e.capture?y:m,e.options])}:function(e){return E.apply(e.target,[e.eventName,e.invoke,e.options])},k=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:function(e,t){var n=typeof t;return n===j&&e.callback===t||n===V&&e.originalDelegate===t},D=function(t,n,i,o,l,a){return void 0===l&&(l=!1),void 0===a&&(a=!1),function(){var s=this||e,u=(Zone,arguments[1]);if(!u)return t.apply(this,arguments);var c=!1;if(typeof u!==j){if(!u.handleEvent)return t.apply(this,arguments);c=!0}if(!h||h(t,u,s,arguments)){var d,p=arguments[0],f=arguments[2],m=!1;void 0===f?d=!1:!0===f?d=!0:!1===f?d=!1:(d=!!f&&!!f.capture,m=!!f&&!!f.once);var g,y=Zone.current,b=A[p];if(b)g=b[d?M:P];else{var _=z+(p+P),w=z+(p+M);A[p]={},A[p][P]=_,A[p][M]=w,g=d?w:_}var C=s[g],E=!1;if(C){if(E=!0,v)for(var S=0;S<C.length;S++)if(k(C[S],u))return}else C=s[g]=[];var O,T=s.constructor[F],D=L[T];D&&(O=D[p]),O||(O=T+n+p),x.options=f,m&&(x.options.once=!1),x.target=s,x.capture=d,x.eventName=p,x.isExisting=E;var I=y.scheduleEventTask(O,u,r?N:null,i,o);return m&&(f.once=!0),I.options=f,I.target=s,I.capture=d,I.eventName=p,c&&(I.originalDelegate=u),a?C.unshift(I):C.push(I),l?s:void 0}}};return _[i]=D(C,d,r?function(e){if(!x.isExisting)return C.apply(x.target,[x.eventName,x.capture?y:m,x.options])}:function(e){return C.apply(x.target,[x.eventName,e.invoke,x.options])},T,b),w&&(_[p]=D(w,f,function(e){return w.apply(x.target,[x.eventName,e.invoke,x.options])},T,b,!0)),_[o]=function(){var t,n=this||e,r=arguments[0],i=arguments[2];t=void 0!==i&&(!0===i||!1!==i&&!!i&&!!i.capture);var o=arguments[1];if(!o)return E.apply(this,arguments);if(!h||h(E,o,n,arguments)){var l,a=A[r];a&&(l=a[t?M:P]);var s=l&&n[l];if(s)for(var u=0;u<s.length;u++){var c=s[u];if(k(c,o))return s.splice(u,1),c.isRemoved=!0,0===s.length&&(c.allRemoved=!0,n[l]=null),void c.zone.cancelTask(c)}}},_[l]=function(){for(var t=[],n=u(this||e,arguments[0]),r=0;r<n.length;r++){var i=n[r];t.push(i.originalDelegate?i.originalDelegate:i.callback)}return t},_[s]=function(){var t=this||e,n=arguments[0];if(n){var r=A[n];if(r){var i=t[r[P]],l=t[r[M]];if(i){var a=R(i);for(d=0;d<a.length;d++)this[o].apply(this,[n,(u=a[d]).originalDelegate?u.originalDelegate:u.callback,u.options])}if(l)for(a=R(l),d=0;d<a.length;d++){var u;this[o].apply(this,[n,(u=a[d]).originalDelegate?u.originalDelegate:u.callback,u.options])}}}else{for(var c=Object.keys(t),d=0;d<c.length;d++){var p=B.exec(c[d]),f=p&&p[1];f&&"removeListener"!==f&&this[s].apply(this,[f])}this[s].apply(this,["removeListener"])}},a(_[i],C),a(_[o],E),O&&a(_[s],O),S&&a(_[l],S),!0}for(var i=n&&n.addEventListenerFnName||"addEventListener",o=n&&n.removeEventListenerFnName||"removeEventListener",l=n&&n.listenersFnName||"eventListeners",s=n&&n.removeAllFnName||"removeAllListeners",c=g(i),d="."+i+":",p="prependListener",f="."+p+":",h=function(e,t,n){if(!e.isRemoved){var r=e.callback;typeof r===V&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var i=e.options;i&&"object"==typeof i&&i.once&&t[o].apply(t,[n.type,e.originalDelegate?e.originalDelegate:e.callback,i])}},m=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[A[t.type][P]];if(r)if(1===r.length)h(r[0],n,t);else for(var i=r.slice(),o=0;o<i.length&&(!t||!0!==t[H]);o++)h(i[o],n,t)}},y=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[A[t.type][M]];if(r)if(1===r.length)h(r[0],n,t);else for(var i=r.slice(),o=0;o<i.length&&(!t||!0!==t[H]);o++)h(i[o],n,t)}},v=[],b=0;b<t.length;b++)v[b]=r(t[b],n);return v}function u(e,t){var n=[];for(var r in e){var i=B.exec(r),o=i&&i[1];if(o&&(!t||o===t)){var l=e[r];if(l)for(var a=0;a<l.length;a++)n.push(l[a])}}return n}function c(e,t,n,r){function i(t){var n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{typeof n.handleId===c?delete u[n.handleId]:n.handleId&&(n.handleId[W]=null)}},n.handleId=a.apply(e,n.args),t}function o(e){return s(e.data.handleId)}var a=null,s=null;n+=r;var u={},c="number";a=l(e,t+=r,function(n){return function(l,a){if("function"==typeof a[0]){var s=Zone.current.scheduleMacroTask(t,a[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?a[1]||0:null,args:a},i,o);if(!s)return s;var d=s.data.handleId;return typeof d===c?u[d]=s:d&&(d[W]=s),d&&d.ref&&d.unref&&"function"==typeof d.ref&&"function"==typeof d.unref&&(s.ref=d.ref.bind(d),s.unref=d.unref.bind(d)),typeof d===c||d?d:s}return n.apply(e,a)}}),s=l(e,n,function(t){return function(n,r){var i,o=r[0];typeof o===c?i=u[o]:(i=o&&o[W])||(i=o),i&&"string"==typeof i.type?"notScheduled"!==i.state&&(i.cancelFn&&i.data.isPeriodic||0===i.runCount)&&(typeof o===c?delete u[o]:o&&(o[W]=null),i.zone.cancelTask(i)):t.apply(e,r)}})}function d(e,t){return e&&e[K]&&e[K][t]}function p(e,t,n){return n.configurable=!0,n.configurable||(e[K]||q(e,K,{writable:!0,value:{}}),e[K][t]=!0),n}function f(e,t,n,r){try{return q(e,t,n)}catch(o){if(!n.configurable)throw o;typeof r==$?delete n.configurable:n.configurable=r;try{return q(e,t,n)}catch(r){var i=null;try{i=JSON.stringify(n)}catch(e){i=i.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+i+"' on object '"+e+"' and got error, giving up: "+r)}}}function h(e,t,n,r){i(e,function(e,t,n){if(!n)return t;var r=n.filter(function(t){return t.target===e});if(!r||0===r.length)return t;var i=r[0].ignoreProperties;return t.filter(function(e){return-1===i.indexOf(e)})}(e,t,n),r)}!function(e){function t(e){a&&a.mark&&a.mark(e)}function n(e,t){a&&a.measure&&a.measure(e,t)}function r(t){0===M&&0===g.length&&(u||e[h]&&(u=e[h].resolve(0)),u?u[m](i):e[f](i,0)),t&&g.push(t)}function i(){if(!y){for(y=!0;g.length;){var e=g;g=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(e){D.onUnhandledError(e)}}}l("ignoreConsoleErrorUncaughtError"),D.microtaskDrainDone(),y=!1}}function o(){}function l(e){return"__zone_symbol__"+e}var a=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var s=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new d(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==k.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(r,"current",{get:function(){return I.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return R},enumerable:!0,configurable:!0}),r.__load_patch=function(i,o){if(k.hasOwnProperty(i))throw Error("Already loaded patch: "+i);if(!e["__Zone_disable_"+i]){var l="Zone:"+i;t(l),k[i]=o(e,r,D),n(l,l)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),I={parent:I,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{I=I.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),I={parent:I,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{I=I.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||v).name+"; Execution: "+this.name+")");if(e.state!==b||e.type!==T){var r=e.state!=x;r&&e._transitionTo(x,w),e.runCount++;var i=R;R=e,I={parent:I,zone:this};try{e.type==O&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{e.state!==b&&e.state!==E&&(e.type==T||e.data&&e.data.isPeriodic?r&&e._transitionTo(w,x):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(b,x,b))),I=I.parent,R=i}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,b);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(E,_,b),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(w,_),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(S,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,i){return this.scheduleTask(new p(O,e,t,n,r,i))},r.prototype.scheduleEventTask=function(e,t,n,r,i){return this.scheduleTask(new p(T,e,t,n,r,i))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||v).name+"; Execution: "+this.name+")");e._transitionTo(C,w,x);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,C),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(b,C),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();s.__symbol__=l;var u,c={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,i,o){return e.invokeTask(n,r,i,o)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},d=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask;(r||t&&t._hasTaskZS)&&(this._hasTaskZS=r?n:c,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=c,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=c,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=c,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new s(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t))||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=S)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=i||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})},e}(),p=function(){function t(n,r,i,o,l,a){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=o,this.scheduleFn=l,this.cancelFn=a,this.callback=i;var s=this;this.invoke=n===T&&o&&o.isUsingGlobalCallback?t.invokeTask:function(){return t.invokeTask.apply(e,[s,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),M++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==M&&i(),M--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(b,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==b&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),f=l("setTimeout"),h=l("Promise"),m=l("then"),g=[],y=!1,v={name:"NO ZONE"},b="notScheduled",_="scheduling",w="scheduled",x="running",C="canceling",E="unknown",S="microTask",O="macroTask",T="eventTask",k={},D={symbol:l,currentZoneFrame:function(){return I},onUnhandledError:o,microtaskDrainDone:o,scheduleMicroTask:r,showUncaughtError:function(){return!s[l("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:o,patchMethod:function(){return o},setNativePromise:function(e){u=e.resolve(0)}},I={parent:null,zone:new s(null,null)},R=null,M=0;n("Zone","Zone"),e.Zone=s}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||e);var m=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}};Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){return e&&e.then}function i(e){return e}function o(e){return I.reject(e)}function l(e,t){return function(n){try{a(e,t,n)}catch(t){a(e,!1,t)}}}function a(e,r,i){var o=E();if(e===i)throw new TypeError(S);if(e[y]===_){var c=null;try{typeof i!==O&&typeof i!==T||(c=i&&i.then)}catch(t){return o(function(){a(e,!1,t)})(),e}if(r!==x&&i instanceof I&&i.hasOwnProperty(y)&&i.hasOwnProperty(v)&&i[y]!==_)s(i),a(e,i[y],i[v]);else if(r!==x&&typeof c===T)try{c.apply(i,[o(l(e,r)),o(l(e,!1))])}catch(t){o(function(){a(e,!1,t)})()}else{e[y]=r;var d=e[v];e[v]=i,r===x&&i instanceof Error&&(i[k]=t.currentTask);for(var f=0;f<d.length;)u(e,d[f++],d[f++],d[f++],d[f++]);if(0==d.length&&r==x){e[y]=C;try{throw new Error("Uncaught (in promise): "+i+(i&&i.stack?"\n"+i.stack:""))}catch(r){var h=r;h.rejection=i,h.promise=e,h.zone=t.current,h.task=t.currentTask,p.push(h),n.scheduleMicroTask()}}}}return e}function s(e){if(e[y]===C){try{var n=t[D];n&&typeof n===T&&n.apply(this,[{rejection:e[v],promise:e}])}catch(e){}e[y]=x;for(var r=0;r<p.length;r++)e===p[r].promise&&p.splice(r,1)}}function u(e,t,n,r,l){s(e);var u=e[y]?typeof r===T?r:i:typeof l===T?l:o;t.scheduleMicroTask(b,function(){try{a(n,!0,t.run(u,void 0,[e[v]]))}catch(e){a(n,!1,e)}})}function c(e){var t=e.prototype,n=t.then;t[h]=n;var r=Object.getOwnPropertyDescriptor(e.prototype,"then");r&&!1===r.writable&&r.configurable&&Object.defineProperty(e.prototype,"then",{writable:!0}),e.prototype.then=function(e,t){var r=this;return new I(function(e,t){n.call(r,e,t)}).then(e,t)},e[N]=!0}var d=n.symbol,p=[],f=d("Promise"),h=d("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;p.length;)for(var e=function(){var e=p.shift();try{e.zone.runGuarded(function(){throw e})}catch(e){!function(e){n.onUnhandledError(e);try{var r=t[g];r&&"function"==typeof r&&r.apply(this,[e])}catch(e){}}(e)}};p.length;)e()};var g=d("unhandledPromiseRejectionHandler"),y=d("state"),v=d("value"),b="Promise.then",_=null,w=!0,x=!1,C=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},S="Promise resolved with itself",O="object",T="function",k=d("currentTask"),D=d("rejectionHandledHandler"),I=function(){function e(t){if(!(this instanceof e))throw new Error("Must be an instanceof Promise.");this[y]=_,this[v]=[];try{t&&t(l(this,w),l(this,x))}catch(e){a(this,!1,e)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return a(new this(null),w,e)},e.reject=function(e){return a(new this(null),x,e)},e.race=function(e){function t(e){l&&(l=i(e))}function n(e){l&&(l=o(e))}var i,o,l=new this(function(e,t){n=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}([e,t],2),i=n[0],o=n[1];var n});try{for(var a=m(e),s=a.next();!s.done;s=a.next()){var u=s.value;r(u)||(u=this.resolve(u)),u.then(t,n)}}catch(e){c={error:e}}finally{try{s&&!s.done&&(d=a.return)&&d.call(a)}finally{if(c)throw c.error}}return l;var c,d},e.all=function(e){var t,n,i=new this(function(e,r){t=e,n=r}),o=0,l=[];try{for(var a=m(e),s=a.next();!s.done;s=a.next()){var u=s.value;r(u)||(u=this.resolve(u)),u.then(function(e){return function(n){l[e]=n,--o||t(l)}}(o),n),o++}}catch(e){c={error:e}}finally{try{s&&!s.done&&(d=a.return)&&d.call(a)}finally{if(c)throw c.error}}return o||t(l),i;var c,d},e.prototype.then=function(e,n){var r=new this.constructor(null),i=t.current;return this[y]==_?this[v].push(i,r,e,n):u(this,i,r,e,n),r},e.prototype.catch=function(e){return this.then(null,e)},e}();I.resolve=I.resolve,I.reject=I.reject,I.race=I.race,I.all=I.all;var R=e[f]=e.Promise,M=t.__symbol__("ZoneAwarePromise"),P=Object.getOwnPropertyDescriptor(e,"Promise");P&&!P.configurable||(P&&delete P.writable,P&&delete P.value,P||(P={configurable:!0,enumerable:!0}),P.get=function(){return e[M]?e[M]:e[f]},P.set=function(t){t===I?e[M]=t:(e[f]=t,t.prototype[h]||c(t),n.setNativePromise(t))},Object.defineProperty(e,"Promise",P)),e.Promise=I;var N=d("thenPatched");if(R){c(R);var A=e.fetch;typeof A==T&&(e.fetch=function(e){return function(){var t=e.apply(this,arguments);if(t instanceof I)return t;var n=t.constructor;return n[N]||c(n),t}}(A))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=p,I});var g=Zone.__symbol__,y="object"==typeof window&&window||"object"==typeof self&&self||e,v="function",b="undefined",_="removeAttribute",w="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,x=!("nw"in y)&&void 0!==y.process&&"[object process]"==={}.toString.call(y.process),C=!x&&!w&&!("undefined"==typeof window||!window.HTMLElement),E=void 0!==y.process&&"[object process]"==={}.toString.call(y.process)&&!w&&!("undefined"==typeof window||!window.HTMLElement),S={},O=function(e){if(e=e||y.event){var t=S[e.type];t||(t=S[e.type]=g("ON_PROPERTY"+e.type));var n=(this||e.target||y)[t],r=n&&n.apply(this,arguments);return void 0==r||r||e.preventDefault(),r}},T=g("originalInstance"),k=!1,D=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString,i=g("OriginalDelegate"),o=g("Promise"),l=g("Error");Function.prototype.toString=function(){if("function"==typeof this){var t=this[i];if(t)return"function"==typeof t?r.apply(this[i],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[o];if(n)return r.apply(n,arguments)}if(this===Error){var a=e[l];if(a)return r.apply(a,arguments)}}return r.apply(this,arguments)};var a=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":a.apply(this,arguments)}});var I=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l},R=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(I(arguments[t]));return e},M="true",P="false",N={isUsingGlobalCallback:!0},A={},L={},F="name",j="function",V="object",z="__zone_symbol__",B=/^__zone_symbol__(\w+)(true|false)$/,H="__zone_symbol__propagationStopped",W=g("zoneTask"),q=Object[g("defineProperty")]=Object.defineProperty,U=Object[g("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,G=Object.create,K=g("unconfigurables"),$="undefined",Z=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],Q=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],Y=["load"],X=["blur","error","focus","load","resize","scroll","messageerror"],J=["bounce","finish","start"],ee=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],te=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ne=["close","error","open","message"],re=["error","message"],ie=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],Z,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]),oe=g("unbound");Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=i,n.patchMethod=l}),Zone.__load_patch("timers",function(e,t,n){c(e,"set","clear","Timeout"),c(e,"set","clear","Interval"),c(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e,t,n){c(e,"request","cancel","AnimationFrame"),c(e,"mozRequest","mozCancel","AnimationFrame"),c(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],i=0;i<r.length;i++)l(e,r[i],function(n,r,i){return function(r,o){return t.current.run(n,e,o,i)}})}),Zone.__load_patch("EventTarget",function(e,t,n){(function(e,t){!function(n,r){var i=e.Event;i&&i.prototype&&t.patchMethod(i.prototype,"stopImmediatePropagation",function(e){return function(e,t){e[H]=!0}})}()})(e,n),function(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),i=[],o=e.wtf,l=n.split(",");o?i=l.map(function(e){return"HTML"+e+"Element"}).concat(r):e.EventTarget?i.push("EventTarget"):i=r;for(var a=e.__Zone_disable_IE_check||!1,u=e.__Zone_enable_cross_context_check||!1,c=function(){if(k)return D;k=!0;try{var e=window.navigator.userAgent;return e.indexOf("MSIE "),-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(D=!0),D}catch(e){}}(),d="[object FunctionWrapper]",p="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",f=0;f<ie.length;f++){var h=z+((b=ie[f])+P),m=z+(b+M);A[b]={},A[b][P]=h,A[b][M]=m}for(f=0;f<n.length;f++)for(var g=l[f],y=L[g]={},v=0;v<ie.length;v++){var b;y[b=ie[v]]=g+".addEventListener:"+b}var _=[];for(f=0;f<i.length;f++){var w=e[i[f]];_.push(w&&w.prototype)}s(e,_,{validateHandler:function(e,t,n,r){if(!a&&c)if(u)try{if((i=t.toString())===d||i==p)return e.apply(n,r),!1}catch(t){return e.apply(n,r),!1}else{var i;if((i=t.toString())===d||i==p)return e.apply(n,r),!1}else if(u)try{t.toString()}catch(t){return e.apply(n,r),!1}return!0}}),t.patchEventTarget=s}(e,n);var r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,[r.prototype]),o("MutationObserver"),o("WebKitMutationObserver"),o("IntersectionObserver"),o("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){(function(e,t){if(!x||E){var n="undefined"!=typeof WebSocket;if(function(){if((C||E)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=!!(i=new XMLHttpRequest).onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),n}var r=g("fakeonreadystatechange");Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[r]},set:function(e){this[r]=e}});var i,o=function(){};(i=new XMLHttpRequest).onreadystatechange=o;n=i[r]===o;return i.onreadystatechange=null,n}()){var r=t.__Zone_ignore_on_properties;if(C){h(window,ie.concat(["messageerror"]),r,Object.getPrototypeOf(window)),h(Document.prototype,ie,r),void 0!==window.SVGElement&&h(window.SVGElement.prototype,ie,r),h(Element.prototype,ie,r),h(HTMLElement.prototype,ie,r),h(HTMLMediaElement.prototype,Q,r),h(HTMLFrameSetElement.prototype,Z.concat(X),r),h(HTMLBodyElement.prototype,Z.concat(X),r),h(HTMLFrameElement.prototype,Y,r),h(HTMLIFrameElement.prototype,Y,r);var l=window.HTMLMarqueeElement;l&&h(l.prototype,J,r);var a=window.Worker;a&&h(a.prototype,re,r)}h(XMLHttpRequest.prototype,ee,r);var u=t.XMLHttpRequestEventTarget;u&&h(u&&u.prototype,ee,r),"undefined"!=typeof IDBIndex&&(h(IDBIndex.prototype,te,r),h(IDBRequest.prototype,te,r),h(IDBOpenDBRequest.prototype,te,r),h(IDBDatabase.prototype,te,r),h(IDBTransaction.prototype,te,r),h(IDBCursor.prototype,te,r)),n&&h(WebSocket.prototype,ne,r)}else!function(){for(var e=function(e){var t=ie[e],n="on"+t;self.addEventListener(t,function(e){var t,r,i=e.target;for(r=i?i.constructor.name+"."+n:"unknown."+n;i;)i[n]&&!i[n][oe]&&((t=Zone.current.wrap(i[n],r))[oe]=i[n],i[n]=t),i=i.parentElement},!0)},t=0;t<ie.length;t++)e(t)}(),o("XMLHttpRequest"),n&&function(e,t){var n=t.WebSocket;t.EventTarget||s(t,[n.prototype]),t.WebSocket=function(e,t){var r,o,l=arguments.length>1?new n(e,t):new n(e),a=Object.getOwnPropertyDescriptor(l,"onmessage");return a&&!1===a.configurable?(r=Object.create(l),o=l,["addEventListener","removeEventListener","send","close"].forEach(function(e){r[e]=function(){var t=Array.prototype.slice.call(arguments);if("addEventListener"===e||"removeEventListener"===e){var n=t.length>0?t[0]:void 0;if(n){var i=Zone.__symbol__("ON_PROPERTY"+n);l[i]=r[i]}}return l[e].apply(l,t)}})):r=l,i(r,["close","error","message","open"],o),r};var r=t.WebSocket;for(var o in n)r[o]=n[o]}(0,t)}})(0,e),Object.defineProperty=function(e,t,n){if(d(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=p(e,t,n)),f(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=p(e,n,t[n])}),G(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=U(e,t);return d(e,t)&&(n.configurable=!1),n},function(t){if((C||E)&&"registerElement"in e.document){var n=document.registerElement,r=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,t){return t&&t.prototype&&r.forEach(function(e){var n="Document.registerElement::"+e;if(t.prototype.hasOwnProperty(e)){var r=Object.getOwnPropertyDescriptor(t.prototype,e);r&&r.value?(r.value=Zone.current.wrap(r.value,n),function(t,n,r){var i=r.configurable;f(t,e,r=p(t,e,r),i)}(t.prototype,0,r)):t.prototype[e]=Zone.current.wrap(t.prototype[e],n)}else t.prototype[e]&&(t.prototype[e]=Zone.current.wrap(t.prototype[e],n))}),n.apply(document,[e,t])},a(document.registerElement,n)}}()}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;void 0!==r&&r.prototype&&r.prototype.toBlob&&function(e,t,n){function i(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}var o=null;o=l(r.prototype,"toBlob",function(e){return function(t,n){var r={name:"HTMLCanvasElement.toBlob",target:t,callbackIndex:0,args:n};return r.callbackIndex>=0&&"function"==typeof n[r.callbackIndex]?Zone.current.scheduleMacroTask(r.name,n[r.callbackIndex],r,i,null):e.apply(t,n)}})}()}),Zone.__load_patch("XHR",function(e,t,n){!function(e){function n(e){XMLHttpRequest[a]=!1;var t=e.data,n=t.target,i=n[o];f||(f=n[d],h=n[p]),i&&h.apply(n,[y,i]);var l=n[o]=function(){n.readyState===n.DONE&&!t.aborted&&XMLHttpRequest[a]&&e.state===v&&e.invoke()};return f.apply(n,[y,l]),n[r]||(n[r]=e),_.apply(n,t.args),XMLHttpRequest[a]=!0,e}function u(){}function c(e){var t=e.data;return t.aborted=!0,w.apply(t.target,t.args)}var d=g("addEventListener"),p=g("removeEventListener"),f=XMLHttpRequest.prototype[d],h=XMLHttpRequest.prototype[p];if(!f){var m=e.XMLHttpRequestEventTarget;m&&(f=m.prototype[d],h=m.prototype[p])}var y="readystatechange",v="scheduled",b=l(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[i]=0==t[2],e[s]=t[1],b.apply(e,t)}}),_=l(e.XMLHttpRequest.prototype,"send",function(){return function(e,r){var o=t.current;return e[i]?_.apply(e,r):o.scheduleMacroTask("XMLHttpRequest.send",u,{target:e,url:e[s],isPeriodic:!1,delay:null,args:r,aborted:!1},n,c)}}),w=l(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var n=e[r];if(n&&"string"==typeof n.type){if(null==n.cancelFn||n.data&&n.data.aborted)return;n.zone.cancelTask(n)}}})}(e);var r=g("xhrTask"),i=g("xhrSync"),o=g("xhrListener"),a=g("xhrScheduled"),s=g("xhrURL")}),Zone.__load_patch("geolocation",function(e,r,i){e.navigator&&e.navigator.geolocation&&function(e,r){for(var i=e.constructor.name,o=function(o){var l=r[o],s=e[l];if(s){if(!n(Object.getOwnPropertyDescriptor(e,l)))return"continue";e[l]=function(e){var n=function(){return e.apply(this,t(arguments,i+"."+l))};return a(n,e),n}(s)}},l=0;l<r.length;l++)o(l)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){u(e,t).forEach(function(r){var i=e.PromiseRejectionEvent;if(i){var o=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(o)}})}}e.PromiseRejectionEvent&&(t[g("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[g("rejectionHandledHandler")]=r("rejectionhandled"))})}()}).call(t,n("fRUx"))},eIqN:function(e,t,n){"use strict";function r(){return function(e){return e.lift(new c(e))}}function i(){return new l.Subject}var o=n("6Xbx"),l=n("TO51"),a=n("AP4T"),s=n("E9/g"),u=n("qLnt"),c=function(){function e(e){this.connectable=e}return e.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new d(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i},e}(),d=function(e){function t(t,n){e.call(this,t),this.connectable=n}return Object(o.__extends)(t,e),t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,t>1)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},t}(s.a),p=function(e){function t(t,n){e.call(this),this.source=t,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}return Object(o.__extends)(t,e),t.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},t.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},t.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new u.a).add(this.source.subscribe(new h(this.getSubject(),this))),e.closed?(this._connection=null,e=u.a.EMPTY):this._connection=e),e},t.prototype.refCount=function(){return r()(this)},t}(a.a).prototype,f={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:p._subscribe},_isComplete:{value:p._isComplete,writable:!0},getSubject:{value:p.getSubject},connect:{value:p.connect},refCount:{value:p.refCount}},h=function(e){function t(t,n){e.call(this,t),this.connectable=n}return Object(o.__extends)(t,e),t.prototype._error=function(t){this._unsubscribe(),e.prototype._error.call(this,t)},t.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},t}(l.SubjectSubscriber);t.a=function(){return function(e){return r()(function(e,t){return function(t){var n;n="function"==typeof e?e:function(){return e};var r=Object.create(t,f);return r.source=t,r.subjectFactory=n,r}}(i)(e))}}},eoFs:function(e,t,n){"use strict";n.d(t,"a",function(){return l});var r=n("6Xbx"),i=n("TO51"),o=n("Upor"),l=function(e){function t(t){e.call(this),this._value=t}return Object(r.__extends)(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return n&&!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(i.Subject)},ewdp:function(e,t,n){var r=n("tose"),i=n("+pQw"),o=n("2Fuj");e.exports=n("V+0c")?Object.defineProperties:function(e,t){i(e);for(var n,l=o(t),a=l.length,s=0;a>s;)r.f(e,n=l[s++],t[n]);return e}},f8Ud:function(e,t){(function(t){e.exports=t}).call(t,{})},fAeS:function(e,t,n){"use strict";function r(e,t){return{type:7,name:e,definitions:t,options:{}}}function i(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}}function o(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}}function l(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}}function a(e){return{type:6,styles:e,offset:null}}function s(e,t,n){return{type:0,name:e,styles:t,options:n}}function u(e){return{type:5,steps:e}}function c(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}}function d(e,t){return void 0===t&&(t=null),{type:8,animation:e,options:t}}function p(e){return void 0===e&&(e=null),{type:9,options:e}}function f(e,t){return void 0===t&&(t=null),{type:10,animation:e,options:t}}function h(e,t,n){return void 0===n&&(n=null),{type:11,selector:e,animation:t,options:n}}function m(e,t){return{type:12,timings:e,animation:t}}function g(e){Promise.resolve(null).then(e)}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"AnimationBuilder",function(){return y}),n.d(t,"AnimationFactory",function(){return v}),n.d(t,"AUTO_STYLE",function(){return b}),n.d(t,"animate",function(){return i}),n.d(t,"animateChild",function(){return p}),n.d(t,"animation",function(){return d}),n.d(t,"group",function(){return o}),n.d(t,"keyframes",function(){return u}),n.d(t,"query",function(){return h}),n.d(t,"sequence",function(){return l}),n.d(t,"stagger",function(){return m}),n.d(t,"state",function(){return s}),n.d(t,"style",function(){return a}),n.d(t,"transition",function(){return c}),n.d(t,"trigger",function(){return r}),n.d(t,"useAnimation",function(){return f}),n.d(t,"NoopAnimationPlayer",function(){return _}),n.d(t,"\u0275AnimationGroupPlayer",function(){return w}),n.d(t,"\u0275PRE_STYLE",function(){return x});var y=function(){},v=function(){},b="*",_=function(){function e(){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=0}return e.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},e.prototype.onStart=function(e){this._onStartFns.push(e)},e.prototype.onDone=function(e){this._onDoneFns.push(e)},e.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},e.prototype.hasStarted=function(){return this._started},e.prototype.init=function(){},e.prototype.play=function(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0},e.prototype.triggerMicrotask=function(){var e=this;g(function(){return e._onFinish()})},e.prototype._onStart=function(){this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[]},e.prototype.pause=function(){},e.prototype.restart=function(){},e.prototype.finish=function(){this._onFinish()},e.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},e.prototype.reset=function(){},e.prototype.setPosition=function(e){},e.prototype.getPosition=function(){return 0},e.prototype.triggerCallback=function(e){var t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},e}(),w=function(){function e(e){var t=this;this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=e;var n=0,r=0,i=0,o=this.players.length;0==o?g(function(){return t._onFinish()}):this.players.forEach(function(e){e.onDone(function(){++n>=o&&t._onFinish()}),e.onDestroy(function(){++r>=o&&t._onDestroy()}),e.onStart(function(){++i>=o&&t._onStart()})}),this.totalTime=this.players.reduce(function(e,t){return Math.max(e,t.totalTime)},0)}return e.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},e.prototype.init=function(){this.players.forEach(function(e){return e.init()})},e.prototype.onStart=function(e){this._onStartFns.push(e)},e.prototype._onStart=function(){this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0)},e.prototype.onDone=function(e){this._onDoneFns.push(e)},e.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},e.prototype.hasStarted=function(){return this._started},e.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(function(e){return e.play()})},e.prototype.pause=function(){this.players.forEach(function(e){return e.pause()})},e.prototype.restart=function(){this.players.forEach(function(e){return e.restart()})},e.prototype.finish=function(){this._onFinish(),this.players.forEach(function(e){return e.finish()})},e.prototype.destroy=function(){this._onDestroy()},e.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(function(e){return e.destroy()}),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},e.prototype.reset=function(){this.players.forEach(function(e){return e.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},e.prototype.setPosition=function(e){var t=e*this.totalTime;this.players.forEach(function(e){var n=e.totalTime?Math.min(1,t/e.totalTime):1;e.setPosition(n)})},e.prototype.getPosition=function(){var e=0;return this.players.forEach(function(t){var n=t.getPosition();e=Math.min(n,e)}),e},e.prototype.beforeDestroy=function(){this.players.forEach(function(e){e.beforeDestroy&&e.beforeDestroy()})},e.prototype.triggerCallback=function(e){var t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},e}(),x="!"},fC8q:function(e,t,n){var r=n("dXJ/"),i=n("3r0D")("iterator"),o=n("lexG");e.exports=n("b4gG").getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},fHxy:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.key,l=r.set;r.exp({defineMetadata:function(e,t,n,r){l(e,t,i(n),o(r))}})},fRUx:function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},gBtn:function(e,t,n){var r=n("ZI9W"),i=n("CDXM"),o=n("Iclu")("metadata"),l=o.store||(o.store=new(n("QZhw"))),a=function(e,t,n){var i=l.get(e);if(!i){if(!n)return;l.set(e,i=new r)}var o=i.get(t);if(!o){if(!n)return;i.set(t,o=new r)}return o};e.exports={store:l,map:a,has:function(e,t,n){var r=a(t,n,!1);return void 0!==r&&r.has(e)},get:function(e,t,n){var r=a(t,n,!1);return void 0===r?void 0:r.get(e)},set:function(e,t,n,r){a(n,r,!0).set(e,t)},keys:function(e,t){var n=a(e,t,!1),r=[];return n&&n.forEach(function(e,t){r.push(t)}),r},key:function(e){return void 0===e||"symbol"==typeof e?e:String(e)},exp:function(e){i(i.S,"Reflect",e)}}},gNkH:function(e,t,n){e.exports=!n("V+0c")&&!n("umMR")(function(){return 7!=Object.defineProperty(n("BQSv")("div"),"a",{get:function(){return 7}}).a})},grVA:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={closed:!0,next:function(e){},error:function(e){throw e},complete:function(){}}},gxdV:function(e,t,n){var r=n("tose"),i=n("piOq");e.exports=n("V+0c")?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},gy58:function(e,t,n){"use strict";t.a=function(e){return Object(r.a)(e)(this)};var r=n("5O0w")},jaVc:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(t,n){e.call(this),this.subject=t,this.subscriber=n,this.closed=!1}return Object(r.__extends)(t,e),t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},t}(n("qLnt").a)},kQVV:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){return e&&"number"==typeof e.length}},lI6h:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(){e.apply(this,arguments)}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t.prototype.notifyError=function(e,t){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.destination.complete()},t}(n("E9/g").a)},lexG:function(e,t){e.exports={}},lfBE:function(e,t,n){var r=n("ptrv"),i=n("gxdV"),o=n("rMsi"),l=n("c09d")("src"),a=Function.toString,s=(""+a).split("toString");n("b4gG").inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,n,a){var u="function"==typeof n;u&&(o(n,"name")||i(n,"name",t)),e[t]!==n&&(u&&(o(n,l)||i(n,l,e[t]?""+e[t]:s.join(String(t)))),e===r?e[t]=n:a?e[t]?e[t]=n:i(e,t,n):(delete e[t],i(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[l]||a.call(this)})},lzDK:function(e,t){t.f=Object.getOwnPropertySymbols},mHG6:function(e,t,n){"use strict";t.a=function(e){return e&&"function"!=typeof e.subscribe&&"function"==typeof e.then}},mz3w:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){var t,r=n("xIGM").a.Symbol;return"function"==typeof r?r.observable?t=r.observable:(t=r("observable"),r.observable=t):t="@@observable",t}()},ncNB:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.get,l=r.key;r.exp({getOwnMetadata:function(e,t){return o(e,i(t),arguments.length<3?void 0:l(arguments[2]))}})},oiK7:function(e,t,n){e.exports=function(){"use strict";function e(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function t(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function n(e,n){return t(e).appendChild(n)}function r(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function i(e,t,n,i){var o=r(e,t,n,i);return o.setAttribute("role","presentation"),o}function o(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function l(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function a(t,n){var r=t.className;e(n).test(r)||(t.className+=(r?" ":"")+n)}function s(t,n){for(var r=t.split(" "),i=0;i<r.length;i++)r[i]&&!e(r[i]).test(n)&&(n+=" "+r[i]);return n}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function c(e,t,n){t||(t={});for(var r in e)!e.hasOwnProperty(r)||!1===n&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function d(e,t,n,r,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=r||0,l=i||0;;){var a=e.indexOf("\t",o);if(a<0||a>=t)return l+(t-o);l+=a-o,l+=n-l%n,o=a+1}}function p(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}function f(e,t,n){for(var r=0,i=0;;){var o=e.indexOf("\t",r);-1==o&&(o=e.length);var l=o-r;if(o==e.length||i+l>=t)return r+Math.min(l,t-i);if(i+=o-r,i+=n-i%n,r=o+1,i>=t)return r}}function h(e){for(;go.length<=e;)go.push(m(go)+" ");return go[e]}function m(e){return e[e.length-1]}function g(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function y(){}function v(e,t){var n;return Object.create?n=Object.create(e):(y.prototype=e,n=new y),t&&c(t,n),n}function b(e){return/\w/.test(e)||e>"\x80"&&(e.toUpperCase()!=e.toLowerCase()||yo.test(e))}function _(e,t){return t?!!(t.source.indexOf("\\w")>-1&&b(e))||t.test(e):b(e)}function w(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function x(e){return e.charCodeAt(0)>=768&&vo.test(e)}function C(e,t,n){for(;(n<0?t>0:t<e.length)&&x(e.charAt(t));)t+=n;return t}function E(e,t,n){for(var r=t>n?-1:1;;){if(t==n)return t;var i=(t+n)/2,o=r<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+r}}function S(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t<o){n=i;break}t-=o}return n.lines[t]}function O(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){var o=e.text;i==n.line&&(o=o.slice(0,n.ch)),i==t.line&&(o=o.slice(t.ch)),r.push(o),++i}),r}function T(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function k(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function D(e){if(null==e.parent)return null;for(var t=e.parent,n=p(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function I(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(t<o){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var l=0;l<e.lines.length;++l){var a=e.lines[l].height;if(t<a)break;t-=a}return n+l}function R(e,t){return t>=e.first&&t<e.first+e.size}function M(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function P(e,t,n){if(void 0===n&&(n=null),!(this instanceof P))return new P(e,t,n);this.line=e,this.ch=t,this.sticky=n}function N(e,t){return e.line-t.line||e.ch-t.ch}function A(e,t){return e.sticky==t.sticky&&0==N(e,t)}function L(e){return P(e.line,e.ch)}function F(e,t){return N(e,t)<0?t:e}function j(e,t){return N(e,t)<0?e:t}function V(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function z(e,t){if(t.line<e.first)return P(e.first,0);var n=e.first+e.size-1;return t.line>n?P(n,S(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?P(e.line,t):n<0?P(e.line,0):e}(t,S(e,t.line).text.length)}function B(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=z(e,t[r]);return n}function H(e,t,n){this.marker=e,this.from=t,this.to=n}function W(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function q(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function U(e,t){if(t.full)return null;var n=R(e,t.from.line)&&S(e,t.from.line).markedSpans,r=R(e,t.to.line)&&S(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,o=t.to.ch,l=0==N(t.from,t.to),a=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;null!=o.from&&!(l.inclusiveLeft?o.from<=t:o.from<t)&&(o.from!=t||"bookmark"!=l.type||n&&o.marker.insertLeft)||(r||(r=[])).push(new H(l,o.from,null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)?null:o.to))}return r}(n,i,l),s=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;(null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!n||o.marker.insertLeft))&&(r||(r=[])).push(new H(l,null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t)?null:o.from-t,null==o.to?null:o.to-t))}return r}(r,o,l),u=1==t.text.length,c=m(t.text).length+(u?i:0);if(a)for(var d=0;d<a.length;++d){var p=a[d];if(null==p.to){var f=W(s,p.marker);f?u&&(p.to=null==f.to?null:f.to+c):p.to=i}}if(s)for(var h=0;h<s.length;++h){var g=s[h];null!=g.to&&(g.to+=c),null==g.from?W(a,g.marker)||(g.from=c,u&&(a||(a=[])).push(g)):(g.from+=c,u&&(a||(a=[])).push(g))}a&&(a=G(a)),s&&s!=a&&(s=G(s));var y=[a];if(!u){var v,b=t.text.length-2;if(b>0&&a)for(var _=0;_<a.length;++_)null==a[_].to&&(v||(v=[])).push(new H(a[_].marker,null,null));for(var w=0;w<b;++w)y.push(v);y.push(s)}return y}function G(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function K(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function $(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Z(e){return e.inclusiveLeft?-1:0}function Q(e){return e.inclusiveRight?1:0}function Y(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),i=t.find(),o=N(r.from,i.from)||Z(e)-Z(t);if(o)return-o;return N(r.to,i.to)||Q(e)-Q(t)||t.id-e.id}function X(e,t){var n,r=_o&&e.markedSpans;if(r)for(var i=void 0,o=0;o<r.length;++o)(i=r[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!n||Y(n,i.marker)<0)&&(n=i.marker);return n}function J(e){return X(e,!0)}function ee(e){return X(e,!1)}function te(e,t,n,r,i){var o=S(e,t),l=_o&&o.markedSpans;if(l)for(var a=0;a<l.length;++a){var s=l[a];if(s.marker.collapsed){var u=s.marker.find(0),c=N(u.from,n)||Z(s.marker)-Z(i),d=N(u.to,r)||Q(s.marker)-Q(i);if(!(c>=0&&d<=0||c<=0&&d>=0)&&(c<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?N(u.to,n)>=0:N(u.to,n)>0)||c>=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?N(u.from,r)<=0:N(u.from,r)<0)))return!0}}}function ne(e){for(var t;t=J(e);)e=t.find(-1,!0).line;return e}function re(e,t){var n=S(e,t),r=ne(n);return n==r?t:D(r)}function ie(e,t){if(t>e.lastLine())return t;var n,r=S(e,t);if(!oe(e,r))return t;for(;n=ee(r);)r=n.find(1,!0).line;return D(r)+1}function oe(e,t){var n=_o&&t.markedSpans;if(n)for(var r=void 0,i=0;i<n.length;++i)if((r=n[i]).marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&le(e,t,r))return!0}}function le(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return le(e,r.line,W(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==n.to&&(null==i.to||i.to!=n.from)&&(i.marker.inclusiveLeft||n.marker.inclusiveRight)&&le(e,t,i))return!0}function ae(e){for(var t=0,n=(e=ne(e)).parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;n=o,o=n.parent)for(var l=0;l<o.children.length;++l){var a=o.children[l];if(a==n)break;t+=a.height}return t}function se(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=J(r);){var i=t.find(0,!0);r=i.from.line,n+=i.from.ch-i.to.ch}for(r=e;t=ee(r);){var o=t.find(0,!0);n-=r.text.length-o.from.ch,n+=(r=o.to.line).text.length-o.to.ch}return n}function ue(e){var t=e.display,n=e.doc;t.maxLine=S(n,n.first),t.maxLineLength=se(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var n=se(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}function ce(e,t,n){var r;wo=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:wo=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:wo=i)}return null!=r?r:wo}function de(e,t){var n=e.order;return null==n&&(n=e.order=xo(e.text,t)),n}function pe(e,t){return e._handlers&&e._handlers[t]||Co}function fe(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else{var r=e._handlers,i=r&&r[t];if(i){var o=p(i,n);o>-1&&(r[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function he(e,t){var n=pe(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)}function me(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),he(e,n||t.type,e,t),we(t)||t.codemirrorIgnore}function ge(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==p(n,t[r])&&n.push(t[r])}function ye(e,t){return pe(e,t).length>0}function ve(e){e.prototype.on=function(e,t){Eo(this,e,t)},e.prototype.off=function(e,t){fe(this,e,t)}}function be(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function _e(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function we(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function xe(e){be(e),_e(e)}function Ce(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Xi&&e.ctrlKey&&1==t&&(t=3),t}function Se(e){if(null==so){var t=r("span","\u200b");n(e,r("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(so=t.offsetWidth<=1&&t.offsetHeight>2&&!(zi&&Bi<8))}var i=so?r("span","\u200b"):r("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Oe(e){if(null!=uo)return uo;var r=n(e,document.createTextNode("A\u062eA")),i=no(r,0,1).getBoundingClientRect(),o=no(r,1,2).getBoundingClientRect();return t(e),!(!i||i.left==i.right)&&(uo=o.right-i.right<3)}function Te(e){if("string"==typeof e&&Ro.hasOwnProperty(e))e=Ro[e];else if(e&&"string"==typeof e.name&&Ro.hasOwnProperty(e.name)){var t=Ro[e.name];"string"==typeof t&&(t={name:t}),(e=v(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Te("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Te("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function ke(e,t){t=Te(t);var n=Io[t.name];if(!n)return ke(e,"text/plain");var r=n(e,t);if(Mo.hasOwnProperty(t.name)){var i=Mo[t.name];for(var o in i)i.hasOwnProperty(o)&&(r.hasOwnProperty(o)&&(r["_"+o]=r[o]),r[o]=i[o])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}function De(e,t){c(t,Mo.hasOwnProperty(e)?Mo[e]:Mo[e]={})}function Ie(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function Re(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Me(e,t,n){return!e.startState||e.startState(t,n)}function Pe(e,t,n,r){var i=[e.state.modeGen],o={};Be(e,t.text,e.doc.mode,n,function(e,t){return i.push(e,t)},o,r);for(var l=n.state,a=function(r){n.baseTokens=i;var a=e.state.overlays[r],s=1,u=0;n.state=!0,Be(e,t.text,a.mode,n,function(e,t){for(var n=s;u<e;){var r=i[s];r>e&&i.splice(s,1,e,i[s+1],r),s+=2,u=Math.min(e,r)}if(t)if(a.opaque)i.splice(n,s-n,e,"overlay "+t),s=n+2;else for(;n<s;n+=2){var o=i[n+1];i[n+1]=(o?o+" ":"")+"overlay "+t}},o),n.state=l,n.baseTokens=null,n.baseTokenPos=1},s=0;s<e.state.overlays.length;++s)a(s);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Ne(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=Ae(e,D(t)),i=t.text.length>e.options.maxHighlightLength&&Ie(e.doc.mode,r.state),o=Pe(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Ae(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new Ao(r,!0,t);var o=function(e,n,r){for(var i,o,l=e.doc,a=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=l.first)return l.first;var u=S(l,s-1),c=u.stateAfter;if(c&&(!r||s+(c instanceof No?c.lookAhead:0)<=l.modeFrontier))return s;var p=d(u.text,null,e.options.tabSize);(null==o||i>p)&&(o=s-1,i=p)}return o}(e,0,n),l=o>r.first&&S(r,o-1).stateAfter,a=l?Ao.fromSaved(r,l,o):new Ao(r,Me(r.mode),o);return r.iter(o,t,function(n){Le(e,n.text,a);var r=a.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&r<i.viewTo?a.save():null,a.nextLine()}),n&&(r.modeFrontier=a.line),a}function Le(e,t,n,r){var i=e.doc.mode,o=new Po(t,e.options.tabSize,n);for(o.start=o.pos=r||0,""==t&&Fe(i,n.state);!o.eol();)je(i,o,n.state),o.start=o.pos}function Fe(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=Re(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function je(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=Re(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}function Ve(e,t,n,r){var i,o,l=e.doc,a=l.mode,s=S(l,(t=z(l,t)).line),u=Ae(e,t.line,n),c=new Po(s.text,e.options.tabSize,u);for(r&&(o=[]);(r||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=je(a,c,u.state),r&&o.push(new Lo(c,i,Ie(l.mode,u.state)));return r?o:new Lo(c,i,u.state)}function ze(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Be(e,t,n,r,i,o,l){var a=n.flattenSpans;null==a&&(a=e.options.flattenSpans);var s,u=0,c=null,d=new Po(t,e.options.tabSize,r),p=e.options.addModeClass&&[null];for(""==t&&ze(Fe(n,r.state),o);!d.eol();){if(d.pos>e.options.maxHighlightLength?(a=!1,l&&Le(e,t,r,d.pos),d.pos=t.length,s=null):s=ze(je(n,d,r.state,p),o),p){var f=p[0].name;f&&(s="m-"+(s?f+" "+s:f))}if(!a||c!=s){for(;u<d.start;)i(u=Math.min(d.start,u+5e3),c);c=s}d.start=d.pos}for(;u<d.pos;){var h=Math.min(d.pos,u+5e3);i(h,c),u=h}}function He(e){e.parent=null,K(e)}function We(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?zo:Vo;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function qe(e,t){var n=i("span",null,null,Hi?"padding-right: .1px":null),r={pre:i("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(zi||Hi)&&e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var l=o?t.rest[o-1]:t.line,a=void 0;r.pos=0,r.addToken=Ge,Oe(e.display.measure)&&(a=de(l,e.doc.direction))&&(r.addToken=function(e,t){return function(n,r,i,o,l,a,s){i=i?i+" cm-force-border":"cm-force-border";for(var u=n.pos,c=u+r.length;;){for(var d=void 0,p=0;p<t.length&&!((d=t[p]).to>u&&d.from<=u);p++);if(d.to>=c)return e(n,r,i,o,l,a,s);e(n,r.slice(0,d.to-u),i,o,null,a,s),o=null,r=r.slice(d.to-u),u=d.to}}}(r.addToken,a)),r.map=[],function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,a,s,u,c,d,p,f=i.length,h=0,m=1,g="",y=0;;){if(y==h){s=u=c=d=a="",p=null,y=1/0;for(var v=[],b=void 0,_=0;_<r.length;++_){var w=r[_],x=w.marker;"bookmark"==x.type&&w.from==h&&x.widgetNode?v.push(x):w.from<=h&&(null==w.to||w.to>h||x.collapsed&&w.to==h&&w.from==h)?(null!=w.to&&w.to!=h&&y>w.to&&(y=w.to,u=""),x.className&&(s+=" "+x.className),x.css&&(a=(a?a+";":"")+x.css),x.startStyle&&w.from==h&&(c+=" "+x.startStyle),x.endStyle&&w.to==y&&(b||(b=[])).push(x.endStyle,w.to),x.title&&!d&&(d=x.title),x.collapsed&&(!p||Y(p.marker,x)<0)&&(p=w)):w.from>h&&y>w.from&&(y=w.from)}if(b)for(var C=0;C<b.length;C+=2)b[C+1]==y&&(u+=" "+b[C]);if(!p||p.from==h)for(var E=0;E<v.length;++E)Ke(t,0,v[E]);if(p&&(p.from||0)==h){if(Ke(t,(null==p.to?f+1:p.to)-h,p.marker,null==p.from),null==p.to)return;p.to==h&&(p=!1)}}if(h>=f)break;for(var S=Math.min(f,y);;){if(g){var O=h+g.length;if(!p){var T=O>S?g.slice(0,S-h):g;t.addToken(t,T,l?l+s:s,c,h+T.length==y?u:"",d,a)}if(O>=S){g=g.slice(S-h),h=S;break}h=O,c=""}g=i.slice(o,o=n[m++]),l=We(n[m++],t.cm.options)}}else for(var k=1;k<n.length;k+=2)t.addToken(t,i.slice(o,o=n[k]),We(n[k+1],t.cm.options))}(l,r,Ne(e,l,t!=e.display.externalMeasured&&D(l))),l.styleClasses&&(l.styleClasses.bgClass&&(r.bgClass=s(l.styleClasses.bgClass,r.bgClass||"")),l.styleClasses.textClass&&(r.textClass=s(l.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Se(e.display.measure))),0==o?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(Hi){var u=r.content.lastChild;(/\bcm-tab\b/.test(u.className)||u.querySelector&&u.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return he(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=s(r.pre.className,r.textClass||"")),r}function Ue(e){var t=r("span","\u2022","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Ge(e,t,n,i,o,l,a){if(t){var s,u=e.splitSpaces?function(e,t){if(e.length>1&&!/  /.test(e))return e;for(var n=t,r="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!n||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o="\xa0"),r+=o,n=" "==o}return r}(t,e.trailingSpace):t,c=e.cm.state.specialChars,d=!1;if(c.test(t)){s=document.createDocumentFragment();for(var p=0;;){c.lastIndex=p;var f=c.exec(t),m=f?f.index-p:t.length-p;if(m){var g=document.createTextNode(u.slice(p,p+m));s.appendChild(zi&&Bi<9?r("span",[g]):g),e.map.push(e.pos,e.pos+m,g),e.col+=m,e.pos+=m}if(!f)break;p+=m+1;var y=void 0;if("\t"==f[0]){var v=e.cm.options.tabSize,b=v-e.col%v;(y=s.appendChild(r("span",h(b),"cm-tab"))).setAttribute("role","presentation"),y.setAttribute("cm-text","\t"),e.col+=b}else"\r"==f[0]||"\n"==f[0]?((y=s.appendChild(r("span","\r"==f[0]?"\u240d":"\u2424","cm-invalidchar"))).setAttribute("cm-text",f[0]),e.col+=1):((y=e.cm.options.specialCharPlaceholder(f[0])).setAttribute("cm-text",f[0]),s.appendChild(zi&&Bi<9?r("span",[y]):y),e.col+=1);e.map.push(e.pos,e.pos+1,y),e.pos++}}else e.col+=t.length,s=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,s),zi&&Bi<9&&(d=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),n||i||o||d||a){var _=n||"";i&&(_+=i),o&&(_+=o);var w=r("span",[s],_,a);return l&&(w.title=l),e.content.appendChild(w)}e.content.appendChild(s)}}function Ke(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function $e(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=ee(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}(t),this.size=this.rest?D(m(this.rest))-n+1:1,this.node=this.text=null,this.hidden=oe(e,t)}function Ze(e,t,n){for(var r,i=[],o=t;o<n;o=r){var l=new $e(e.doc,S(e.doc,o),o);r=o+l.size,i.push(l)}return i}function Qe(e,t){var n=pe(e,t);if(n.length){var r,i=Array.prototype.slice.call(arguments,2);Bo?r=Bo.delayedCallbacks:Ho?r=Ho:(r=Ho=[],setTimeout(Ye,0));for(var o=function(e){r.push(function(){return n[e].apply(null,i)})},l=0;l<n.length;++l)o(l)}}function Ye(){var e=Ho;Ho=null;for(var t=0;t<e.length;++t)e[t]()}function Xe(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?function(e,t){var n=t.text.className,r=et(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,tt(e,t)):n&&(t.text.className=n)}(e,t):"gutter"==o?nt(e,t,n,r):"class"==o?tt(e,t):"widget"==o&&function(e,t,n){t.alignable&&(t.alignable=null);for(var r=t.node.firstChild,i=void 0;r;r=i)i=r.nextSibling,"CodeMirror-linewidget"==r.className&&t.node.removeChild(r);it(e,t,n)}(e,t,r)}t.changes=null}function Je(e){return e.node==e.text&&(e.node=r("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),zi&&Bi<8&&(e.node.style.zIndex=2)),e.node}function et(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):qe(e,t)}function tt(e,t){!function(e,t){var n=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(n&&(n+=" CodeMirror-linebackground"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var i=Je(t);t.background=i.insertBefore(r("div",null,n),i.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?Je(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=""),t.text.className=(t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass)||""}function nt(e,t,n,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=Je(t);t.gutterBackground=r("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var a=Je(t),s=t.gutter=r("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(s),a.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=" "+t.line.gutterClass),!e.options.lineNumbers||l&&l["CodeMirror-linenumbers"]||(t.lineNumber=s.appendChild(r("div",M(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),l)for(var u=0;u<e.options.gutters.length;++u){var c=e.options.gutters[u],d=l.hasOwnProperty(c)&&l[c];d&&s.appendChild(r("div",[d],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function rt(e,t,n,r){var i=et(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),tt(e,t),nt(e,t,n,r),it(e,t,r),t.node}function it(e,t,n){if(ot(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)ot(e,t.rest[r],t,n,!1)}function ot(e,t,n,i,o){if(t.widgets)for(var l=Je(n),a=0,s=t.widgets;a<s.length;++a){var u=s[a],c=r("div",[u.node],"CodeMirror-linewidget");u.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),function(e,t,r,i){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var o=i.wrapperWidth;t.style.left=i.fixedPos+"px",e.coverGutter||(o-=i.gutterTotalWidth,t.style.paddingLeft=i.gutterTotalWidth+"px"),t.style.width=o+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-i.gutterTotalWidth+"px"))}(u,c,0,i),e.display.input.setUneditable(c),o&&u.above?l.insertBefore(c,n.gutter||n.text):l.appendChild(c),Qe(u,"redraw")}}function lt(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!o(document.body,e.node)){var i="position: relative;";e.coverGutter&&(i+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(i+="width: "+t.display.wrapper.clientWidth+"px;"),n(t.display.measure,r("div",[e.node],null,i))}return e.height=e.node.parentNode.offsetHeight}function at(e,t){for(var n=Ce(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function st(e){return e.lineSpace.offsetTop}function ut(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function ct(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=n(e.measure,r("pre","x")),i=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,o={left:parseInt(i.paddingLeft),right:parseInt(i.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(e.cachedPaddingH=o),o}function dt(e){return co-e.display.nativeBarWidth}function pt(e){return e.display.scroller.clientWidth-dt(e)-e.display.barWidth}function ft(e){return e.display.scroller.clientHeight-dt(e)-e.display.barHeight}function ht(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var i=0;i<e.rest.length;i++)if(D(e.rest[i])>n)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function mt(e,t,n,r){return vt(e,yt(e,t),n,r)}function gt(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Wt(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function yt(e,t){var r=D(t),i=gt(e,r);i&&!i.text?i=null:i&&i.changes&&(Xe(e,i,r,jt(e)),e.curOp.forceUpdate=!0),i||(i=function(e,t){var r=D(t=ne(t)),i=e.display.externalMeasured=new $e(e.doc,t,r);i.lineN=r;var o=i.built=qe(e,i);return i.text=o.pre,n(e.display.lineMeasure,o.pre),i}(e,t));var o=ht(i,t,r);return{line:t,view:i,rect:null,map:o.map,cache:o.cache,before:o.before,hasHeights:!1}}function vt(e,t,i,o,l){t.before&&(i=-1);var a,s=i+(o||"");return t.cache.hasOwnProperty(s)?a=t.cache[s]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(function(t,n,r){var i=e.options.lineWrapping,o=i&&pt(e);if(!n.measure.heights||i&&n.measure.width!=o){var l=n.measure.heights=[];if(i){n.measure.width=o;for(var a=n.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var u=a[s],c=a[s+1];Math.abs(u.bottom-c.bottom)>2&&l.push((u.bottom+c.top)/2-r.top)}}l.push(r.bottom-r.top)}}(0,t.view,t.rect),t.hasHeights=!0),(a=function(e,t,o,l){var a,s=bt(t.map,i,l),u=s.node,c=s.start,d=s.end,p=s.collapse;if(3==u.nodeType){for(var f=0;f<4;f++){for(;c&&x(t.line.text.charAt(s.coverStart+c));)--c;for(;s.coverStart+d<s.coverEnd&&x(t.line.text.charAt(s.coverStart+d));)++d;if((a=zi&&Bi<9&&0==c&&d==s.coverEnd-s.coverStart?u.parentNode.getBoundingClientRect():function(e,t){var n=Wo;if("left"==l)for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var i=e.length-1;i>=0&&(n=e[i]).left==n.right;i--);return n}(no(u,c,d).getClientRects())).left||a.right||0==c)break;d=c,c-=1,p="right"}zi&&Bi<11&&(a=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Do)return Do;var t=n(e,r("span","x")),i=t.getBoundingClientRect(),o=no(t,0,1).getBoundingClientRect();return Do=Math.abs(i.left-o.left)>1}(e))return t;var i=screen.logicalXDPI/screen.deviceXDPI,o=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*i,right:t.right*i,top:t.top*o,bottom:t.bottom*o}}(e.display.measure,a))}else{c>0&&(p=l="right");var h;a=e.options.lineWrapping&&(h=u.getClientRects()).length>1?h["right"==l?h.length-1:0]:u.getBoundingClientRect()}if(zi&&Bi<9&&!c&&(!a||!a.left&&!a.right)){var m=u.parentNode.getClientRects()[0];a=m?{left:m.left,right:m.left+Ft(e.display),top:m.top,bottom:m.bottom}:Wo}for(var g=a.top-t.rect.top,y=a.bottom-t.rect.top,v=(g+y)/2,b=t.view.measure.heights,_=0;_<b.length-1&&!(v<b[_]);_++);var w={left:("right"==p?a.right:a.left)-t.rect.left,right:("left"==p?a.left:a.right)-t.rect.left,top:_?b[_-1]:0,bottom:b[_]};return a.left||a.right||(w.bogus=!0),e.options.singleCursorHeightPerLine||(w.rtop=g,w.rbottom=y),w}(e,t,0,o)).bogus||(t.cache[s]=a)),{left:a.left,right:a.right,top:l?a.rtop:a.top,bottom:l?a.rbottom:a.bottom}}function bt(e,t,n){for(var r,i,o,l,a,s,u=0;u<e.length;u+=3)if(a=e[u],s=e[u+1],t<a?(i=0,o=1,l="left"):t<s?o=1+(i=t-a):(u==e.length-3||t==s&&e[u+3]>t)&&(i=(o=s-a)-1,t>=s&&(l="right")),null!=i){if(r=e[u+2],a==s&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==s-a)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)r=e[(u+=3)+2],l="right";break}return{node:r,start:i,end:o,collapse:l,coverStart:a,coverEnd:s}}function _t(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function wt(e){e.display.externalMeasure=null,t(e.display.lineMeasure);for(var n=0;n<e.display.view.length;n++)_t(e.display.view[n])}function xt(e){wt(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Ct(){return qi&&Qi?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function Et(){return qi&&Qi?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function St(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=lt(e.widgets[n]));return t}function Ot(e,t,n,r,i){if(!i){var o=St(t);n.top+=o,n.bottom+=o}if("line"==r)return n;r||(r="local");var l=ae(t);if("local"==r?l+=st(e.display):l-=e.display.viewOffset,"page"==r||"window"==r){var a=e.display.lineSpace.getBoundingClientRect();l+=a.top+("window"==r?0:Et());var s=a.left+("window"==r?0:Ct());n.left+=s,n.right+=s}return n.top+=l,n.bottom+=l,n}function Tt(e,t,n){if("div"==n)return t;var r=t.left,i=t.top;if("page"==n)r-=Ct(),i-=Et();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();r+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:r-l.left,top:i-l.top}}function kt(e,t,n,r,i){return r||(r=S(e.doc,t.line)),Ot(e,r,mt(e,r,t.ch,i),n)}function Dt(e,t,n,r,i,o){function l(t,l){var a=vt(e,i,t,l?"right":"left",o);return l?a.left=a.right:a.right=a.left,Ot(e,r,a,n)}function a(e,t,n){return l(n?e-1:e,1==s[t].level!=n)}r=r||S(e.doc,t.line),i||(i=yt(e,r));var s=de(r,e.doc.direction),u=t.ch,c=t.sticky;if(u>=r.text.length?(u=r.text.length,c="before"):u<=0&&(u=0,c="after"),!s)return l("before"==c?u-1:u,"before"==c);var d=ce(s,u,c),p=wo,f=a(u,d,"before"==c);return null!=p&&(f.other=a(u,p,"before"!=c)),f}function It(e,t){var n=0;t=z(e.doc,t),e.options.lineWrapping||(n=Ft(e.display)*t.ch);var r=S(e.doc,t.line),i=ae(r)+st(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Rt(e,t,n,r,i){var o=P(e,t,n);return o.xRel=i,r&&(o.outside=!0),o}function Mt(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Rt(r.first,0,null,!0,-1);var i=I(r,n),o=r.first+r.size-1;if(i>o)return Rt(r.first+r.size-1,S(r,o).text.length,null,!0,1);t<0&&(t=0);for(var l=S(r,i);;){var a=function(e,t,n,r,i){i-=ae(t);var o=yt(e,t),l=St(t),a=0,s=t.text.length,u=!0,c=de(t,e.doc.direction);if(c){var d=(e.options.lineWrapping?function(e,t,n,r,i,o,l){var a=Pt(e,t,r,l),s=a.begin,u=a.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,d=null,p=0;p<i.length;p++){var f=i[p];if(!(f.from>=u||f.to<=s)){var h=vt(e,r,1!=f.level?Math.min(u,f.to)-1:Math.max(s,f.from)).right,m=h<o?o-h+1e9:h-o;(!c||d>m)&&(c=f,d=m)}}return c||(c=i[i.length-1]),c.from<s&&(c={from:s,to:c.to,level:c.level}),c.to>u&&(c={from:c.from,to:u,level:c.level}),c}:function(e,t,n,r,i,o,l){var a=E(function(a){var s=i[a],u=1!=s.level;return At(Dt(e,P(n,u?s.to:s.from,u?"before":"after"),"line",t,r),o,l,!0)},0,i.length-1),s=i[a];if(a>0){var u=1!=s.level,c=Dt(e,P(n,u?s.from:s.to,u?"after":"before"),"line",t,r);At(c,o,l,!0)&&c.top>l&&(s=i[a-1])}return s})(e,t,n,o,c,r,i);a=(u=1!=d.level)?d.from:d.to-1,s=u?d.to:d.from-1}var p,f,h=null,m=null,g=E(function(t){var n=vt(e,o,t);return n.top+=l,n.bottom+=l,!!At(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(h=t,m=n),!0)},a,s),y=!1;if(m){var v=r-m.left<m.right-r,b=v==u;g=h+(b?0:1),f=b?"after":"before",p=v?m.left:m.right}else{u||g!=s&&g!=a||g++,f=0==g?"after":g==t.text.length?"before":vt(e,o,g-(u?1:0)).bottom+l<=i==u?"after":"before";var _=Dt(e,P(n,g,f),"line",t,o);p=_.left,y=i<_.top||i>=_.bottom}return g=C(t.text,g,1),Rt(n,g,f,y,r-p)}(e,l,i,t,n),s=ee(l),u=s&&s.find(0,!0);if(!s||!(a.ch>u.from.ch||a.ch==u.from.ch&&a.xRel>0))return a;i=D(l=u.to.line)}}function Pt(e,t,n,r){r-=St(t);var i=t.text.length,o=E(function(t){return vt(e,n,t-1).bottom<=r},i,0);return i=E(function(t){return vt(e,n,t).top>r},o,i),{begin:o,end:i}}function Nt(e,t,n,r){return n||(n=yt(e,t)),Pt(e,t,n,Ot(e,t,vt(e,n,r),"line").top)}function At(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Lt(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==jo){jo=r("pre");for(var i=0;i<49;++i)jo.appendChild(document.createTextNode("x")),jo.appendChild(r("br"));jo.appendChild(document.createTextNode("x"))}n(e.measure,jo);var o=jo.offsetHeight/50;return o>3&&(e.cachedTextHeight=o),t(e.measure),o||1}function Ft(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=r("span","xxxxxxxxxx"),i=r("pre",[t]);n(e.measure,i);var o=t.getBoundingClientRect(),l=(o.right-o.left)/10;return l>2&&(e.cachedCharWidth=l),l||10}function jt(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)n[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,r[e.options.gutters[l]]=o.clientWidth;return{fixedPos:Vt(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function Vt(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function zt(e){var t=Lt(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/Ft(e.display)-3);return function(i){if(oe(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return n?o+(Math.ceil(i.text.length/r)||1)*t:o+t}}function Bt(e){var t=e.doc,n=zt(e);t.iter(function(e){var t=n(e);t!=e.height&&k(e,t)})}function Ht(e,t,n,r){var i=e.display;if(!n&&"true"==Ce(t).getAttribute("cm-not-content"))return null;var o,l,a=i.lineSpace.getBoundingClientRect();try{o=t.clientX-a.left,l=t.clientY-a.top}catch(t){return null}var s,u=Mt(e,o,l);if(r&&1==u.xRel&&(s=S(e.doc,u.line).text).length==u.ch){var c=d(s,s.length,e.options.tabSize)-s.length;u=P(u.line,Math.max(0,Math.round((o-ct(e.display).left)/Ft(e.display))-c))}return u}function Wt(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r<n.length;r++)if((t-=n[r].size)<0)return r}function qt(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Ut(e,t){void 0===t&&(t=!0);for(var n=e.doc,i={},o=i.cursors=document.createDocumentFragment(),l=i.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(t||a!=n.sel.primIndex){var s=n.sel.ranges[a];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var u=s.empty();(u||e.options.showCursorWhenSelecting)&&Gt(e,s.head,o),u||function(e,t,n){function i(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),s.appendChild(r("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==n?d-e:n)+"px;\n                             height: "+(i-t)+"px"))}function o(t,n,r){function o(n,r){return kt(e,P(t,n),"div",f,r)}function l(t,n,r){var i=Nt(e,f,null,t),l="ltr"==n==("after"==r)?"left":"right";return o("after"==r?i.begin:i.end-(/\s/.test(f.text.charAt(i.end-1))?2:1),l)[l]}var s,u,f=S(a,t),h=f.text.length,m=de(f,a.direction);return function(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(m,n||0,null==r?h:r,function(e,t,a,f){var g="ltr"==a,y=o(e,g?"left":"right"),v=o(t-1,g?"right":"left"),b=null==n&&0==e,_=null==r&&t==h,w=0==f,x=!m||f==m.length-1;if(v.top-y.top<=3){var C=(p?b:_)&&w?c:(g?y:v).left;i(C,y.top,((p?_:b)&&x?d:(g?v:y).right)-C,y.bottom)}else{var E,S,O,T;g?(E=p&&b&&w?c:y.left,S=p?d:l(e,a,"before"),O=p?c:l(t,a,"after"),T=p&&_&&x?d:v.right):(E=p?l(e,a,"before"):c,S=!p&&b&&w?d:y.right,O=!p&&_&&x?c:v.left,T=p?l(t,a,"after"):d),i(E,y.top,S-E,y.bottom),y.bottom<v.top&&i(c,y.bottom,null,v.top),i(O,v.top,T-O,v.bottom)}(!s||Kt(y,s)<0)&&(s=y),Kt(v,s)<0&&(s=v),(!u||Kt(y,u)<0)&&(u=y),Kt(v,u)<0&&(u=v)}),{start:s,end:u}}var l=e.display,a=e.doc,s=document.createDocumentFragment(),u=ct(e.display),c=u.left,d=Math.max(l.sizerWidth,pt(e)-l.sizer.offsetLeft)-u.right,p="ltr"==a.direction,f=t.from(),h=t.to();if(f.line==h.line)o(f.line,f.ch,h.ch);else{var m=S(a,f.line),g=S(a,h.line),y=ne(m)==ne(g),v=o(f.line,f.ch,y?m.text.length+1:null).end,b=o(h.line,y?0:null,h.ch).start;y&&(v.top<b.top-2?(i(v.right,v.top,null,v.bottom),i(c,b.top,b.left,b.bottom)):i(v.right,v.top,b.left-v.right,v.bottom)),v.bottom<b.top&&i(c,v.bottom,null,b.top)}n.appendChild(s)}(e,s,l)}}return i}function Gt(e,t,n){var i=Dt(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),o=n.appendChild(r("div","\xa0","CodeMirror-cursor"));if(o.style.left=i.left+"px",o.style.top=i.top+"px",o.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var l=n.appendChild(r("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Kt(e,t){return e.top-t.top||e.left-t.left}function $t(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Zt(e){e.state.focused||(e.display.input.focus(),Yt(e))}function Qt(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Xt(e))},100)}function Yt(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(he(e,"focus",e,t),e.state.focused=!0,a(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),Hi&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),$t(e))}function Xt(e,t){e.state.delayingBlurEvent||(e.state.focused&&(he(e,"blur",e,t),e.state.focused=!1,oo(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Jt(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i=t.view[r],o=void 0;if(!i.hidden){if(zi&&Bi<8){var l=i.node.offsetTop+i.node.offsetHeight;o=l-n,n=l}else{var a=i.node.getBoundingClientRect();o=a.bottom-a.top}var s=i.line.height-o;if(o<2&&(o=Lt(t)),(s>.005||s<-.005)&&(k(i.line,o),en(i.line),i.rest))for(var u=0;u<i.rest.length;u++)en(i.rest[u])}}}function en(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function tn(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-st(e));var i=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,o=I(t,r),l=I(t,i);if(n&&n.ensure){var a=n.ensure.from.line,s=n.ensure.to.line;a<o?(o=a,l=I(t,ae(S(t,a))+e.wrapper.clientHeight)):Math.min(s,t.lastLine())>=l&&(o=I(t,ae(S(t,s))-e.wrapper.clientHeight),l=s)}return{from:o,to:Math.max(l,o+1)}}function nn(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=Vt(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&(n[l].gutter&&(n[l].gutter.style.left=o),n[l].gutterBackground&&(n[l].gutterBackground.style.left=o));var a=n[l].alignable;if(a)for(var s=0;s<a.length;s++)a[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function rn(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=M(e.options,t.first+t.size-1),i=e.display;if(n.length!=i.lineNumChars){var o=i.measure.appendChild(r("div",[r("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),l=o.firstChild.offsetWidth,a=o.offsetWidth-l;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(l,i.lineGutter.offsetWidth-a)+1,i.lineNumWidth=i.lineNumInnerWidth+a,i.lineNumChars=i.lineNumInnerWidth?n.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Nn(e),!0}return!1}function on(e,t){var n=e.display,r=Lt(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=ft(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var a=e.doc.height+ut(n),s=t.bottom>a-r;if(t.top<i)l.scrollTop=t.top<r?0:t.top;else if(t.bottom>i+o){var u=Math.min(t.top,(s?a:t.bottom)-o);u!=i&&(l.scrollTop=u)}var c=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,d=pt(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),p=t.right-t.left>d;return p&&(t.right=t.left+d),t.left<10?l.scrollLeft=0:t.left<c?l.scrollLeft=Math.max(0,t.left-(p?0:10)):t.right>d+c-3&&(l.scrollLeft=t.right+(p?0:10)-d),l}function ln(e,t){null!=t&&(un(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function an(e){un(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function sn(e,t,n){null==t&&null==n||un(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function un(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,cn(e,It(e,t.from),It(e,t.to),t.margin))}function cn(e,t,n,r){var i=on(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});sn(e,i.scrollLeft,i.scrollTop)}function dn(e,t){Math.abs(e.doc.scrollTop-t)<2||(Li||Pn(e,{top:t}),pn(e,t,!0),Li&&Pn(e),Dn(e,100))}function pn(e,t,n){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function fn(e,t,n,r){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,nn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function hn(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+ut(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+dt(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function mn(e,t){t||(t=hn(e));var n=e.display.barWidth,r=e.display.barHeight;gn(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Jt(e),gn(e,hn(e)),n=e.display.barWidth,r=e.display.barHeight}function gn(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}function yn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&oo(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Go[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Eo(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){"horizontal"==n?fn(e,t):dn(e,t)},e),e.display.scrollbars.addClass&&a(e.display.wrapper,e.display.scrollbars.addClass)}function vn(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ko},function(e){Bo?Bo.ops.push(e):e.ownsGroup=Bo={ops:[e],delayedCallbacks:[]}}(e.curOp)}function bn(e){!function(t,n){var i=e.curOp.ownsGroup;if(i)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}(i)}finally{Bo=null,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(t){for(var n=e.ops,i=0;i<n.length;i++)!function(e){var t=e.cm,n=t.display;(function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=dt(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=dt(e)+"px",t.scrollbarsClipped=!0)})(t),e.updateMaxLine&&ue(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new $o(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}(n[i]);for(var o=0;o<n.length;o++)!function(e){e.updatedDisplay=e.mustUpdate&&Rn(e.cm,e.update)}(n[o]);for(var a=0;a<n.length;a++)!function(e){var t=e.cm,n=t.display;e.updatedDisplay&&Jt(t),e.barMeasure=hn(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=mt(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+dt(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-pt(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}(n[a]);for(var s=0;s<n.length;s++)!function(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&fn(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==l();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&mn(t,e.barMeasure),e.updatedDisplay&&An(t,e.barMeasure),e.selectionChanged&&$t(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&Zt(e.cm)}(n[s]);for(var u=0;u<n.length;u++)!function(e){var t=e.cm,n=t.display,i=t.doc;if(e.updatedDisplay&&Mn(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=e.scrollTop&&pn(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&fn(t,e.scrollLeft,!0,!0),e.scrollToPos){!function(e,t){if(!me(e,"scrollCursorIntoView")){var n=e.display,i=n.sizer.getBoundingClientRect(),o=null;if(t.top+i.top<0?o=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!$i){var l=r("div","\u200b",null,"position: absolute;\n                         top: "+(t.top-n.viewOffset-st(e.display))+"px;\n                         height: "+(t.bottom-t.top+dt(e)+n.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(o),e.display.lineSpace.removeChild(l)}}}(t,function(e,t,n,r){null==r&&(r=0);var i;e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?P(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?P(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,a=Dt(e,t),s=n&&n!=t?Dt(e,n):a,u=on(e,i={left:Math.min(a.left,s.left),top:Math.min(a.top,s.top)-r,right:Math.max(a.left,s.left),bottom:Math.max(a.bottom,s.bottom)+r}),c=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=u.scrollTop&&(dn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(fn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(l=!0)),!l)break}return i}(t,z(i,e.scrollToPos.from),z(i,e.scrollToPos.to),e.scrollToPos.margin))}var o=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(o)for(var a=0;a<o.length;++a)o[a].lines.length||he(o[a],"hide");if(l)for(var s=0;s<l.length;++s)l[s].lines.length&&he(l[s],"unhide");n.wrapper.offsetHeight&&(i.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&he(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}(n[u])}()}(i)}}()}function _n(e,t){if(e.curOp)return t();vn(e);try{return t()}finally{bn(e)}}function wn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);vn(e);try{return t.apply(e,arguments)}finally{bn(e)}}}function xn(e){return function(){if(this.curOp)return e.apply(this,arguments);vn(this);try{return e.apply(this,arguments)}finally{bn(this)}}}function Cn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);vn(t);try{return e.apply(this,arguments)}finally{bn(t)}}}function En(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var i=e.display;if(r&&n<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)_o&&re(e.doc,t)<i.viewTo&&On(e);else if(n<=i.viewFrom)_o&&ie(e.doc,n+r)>i.viewFrom?On(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)On(e);else if(t<=i.viewFrom){var o=Tn(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):On(e)}else if(n>=i.viewTo){var l=Tn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):On(e)}else{var a=Tn(e,t,t,-1),s=Tn(e,n,n+r,1);a&&s?(i.view=i.view.slice(0,a.index).concat(Ze(e,a.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=r):On(e)}var u=i.externalMeasured;u&&(n<u.lineN?u.lineN+=r:t<u.lineN+u.size&&(i.externalMeasured=null))}function Sn(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var o=r.view[Wt(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==p(l,n)&&l.push(n)}}}function On(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Tn(e,t,n,r){var i,o=Wt(e,t),l=e.display.view;if(!_o||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var a=e.display.viewFrom,s=0;s<o;s++)a+=l[s].size;if(a!=t){if(r>0){if(o==l.length-1)return null;i=a+l[o].size-t,o++}else i=a-t;t+=i,n+=i}for(;re(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function kn(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function Dn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,u(In,e))}function In(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=Ae(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(r.line>=e.display.viewFrom){var l=o.styles,a=o.text.length>e.options.maxHighlightLength?Ie(t.mode,r.state):null,s=Pe(e,o,r,!0);a&&(r.state=a),o.styles=s.styles;var u=o.styleClasses,c=s.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var d=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),p=0;!d&&p<l.length;++p)d=l[p]!=o.styles[p];d&&i.push(r.line),o.stateAfter=r.save(),r.nextLine()}else o.text.length<=e.options.maxHighlightLength&&Le(e,o.text,r),o.stateAfter=r.line%5==0?r.save():null,r.nextLine();if(+new Date>n)return Dn(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&_n(e,function(){for(var t=0;t<i.length;t++)Sn(e,i[t],"text")})}}function Rn(e,n){var r=e.display,i=e.doc;if(n.editorIsHidden)return On(e),!1;if(!n.force&&n.visible.from>=r.viewFrom&&n.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==kn(e))return!1;rn(e)&&(On(e),n.dims=jt(e));var a=i.first+i.size,s=Math.max(n.visible.from-e.options.viewportMargin,i.first),u=Math.min(a,n.visible.to+e.options.viewportMargin);r.viewFrom<s&&s-r.viewFrom<20&&(s=Math.max(i.first,r.viewFrom)),r.viewTo>u&&r.viewTo-u<20&&(u=Math.min(a,r.viewTo)),_o&&(s=re(e.doc,s),u=ie(e.doc,u));var c=s!=r.viewFrom||u!=r.viewTo||r.lastWrapHeight!=n.wrapperHeight||r.lastWrapWidth!=n.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=Ze(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=Ze(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(Wt(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(Ze(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,Wt(e,n)))),r.viewTo=n}(e,s,u),r.viewOffset=ae(S(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var d=kn(e);if(!c&&0==d&&!n.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var f=function(e){if(e.hasFocus())return null;var t=l();if(!t||!o(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&o(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return d>4&&(r.lineDiv.style.display="none"),function(e,n,r){function i(t){var n=t.nextSibling;return Hi&&Xi&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var o=e.display,l=e.options.lineNumbers,a=o.lineDiv,s=a.firstChild,u=o.view,c=o.viewFrom,d=0;d<u.length;d++){var f=u[d];if(f.hidden);else if(f.node&&f.node.parentNode==a){for(;s!=f.node;)s=i(s);var h=l&&null!=n&&n<=c&&f.lineNumber;f.changes&&(p(f.changes,"gutter")>-1&&(h=!1),Xe(e,f,c,r)),h&&(t(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(M(e.options,c)))),s=f.node.nextSibling}else{var m=rt(e,f,c,r);a.insertBefore(m,s)}c+=f.size}for(;s;)s=i(s)}(e,r.updateLineNumbers,n.dims),d>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=l()&&(e.activeElt.focus(),e.anchorNode&&o(document.body,e.anchorNode)&&o(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(f),t(r.cursorDiv),t(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,c&&(r.lastWrapHeight=n.wrapperHeight,r.lastWrapWidth=n.wrapperWidth,Dn(e,400)),r.updateLineNumbers=null,!0}function Mn(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=pt(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+ut(e.display)-ft(e),n.top)}),t.visible=tn(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&Rn(e,t);r=!1){Jt(e);var i=hn(e);qt(e),mn(e,i),An(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Pn(e,t){var n=new $o(e,t);if(Rn(e,n)){Jt(e),Mn(e,n);var r=hn(e);qt(e),mn(e,r),An(e,r),n.finish()}}function Nn(e){e.display.sizer.style.marginLeft=e.display.gutters.offsetWidth+"px"}function An(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+dt(e)+"px"}function Ln(e){var n=e.display.gutters,i=e.options.gutters;t(n);for(var o=0;o<i.length;++o){var l=i[o],a=n.appendChild(r("div",null,"CodeMirror-gutter "+l));"CodeMirror-linenumbers"==l&&(e.display.lineGutter=a,a.style.width=(e.display.lineNumWidth||1)+"px")}n.style.display=o?"":"none",Nn(e)}function Fn(e){var t=p(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function jn(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function Vn(e){var t=jn(e);return t.x*=Qo,t.y*=Qo,t}function zn(e,t){var n=jn(t),r=n.x,i=n.y,o=e.display,l=o.scroller,a=l.scrollHeight>l.clientHeight;if(r&&l.scrollWidth>l.clientWidth||i&&a){if(i&&Xi&&Hi)e:for(var s=t.target,u=o.view;s!=l;s=s.parentNode)for(var c=0;c<u.length;c++)if(u[c].node==s){e.display.currentWheelTarget=s;break e}if(r&&!Li&&!Ui&&null!=Qo)return i&&a&&dn(e,Math.max(0,l.scrollTop+i*Qo)),fn(e,Math.max(0,l.scrollLeft+r*Qo)),(!i||i&&a)&&be(t),void(o.wheelStartX=null);if(i&&null!=Qo){var d=i*Qo,p=e.doc.scrollTop,f=p+o.wrapper.clientHeight;d<0?p=Math.max(0,p+d-50):f=Math.min(e.doc.height,f+d+50),Pn(e,{top:p,bottom:f})}Zo<20&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=r,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=l.scrollLeft-o.wheelStartX,t=l.scrollTop-o.wheelStartY,n=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Qo=(Qo*Zo+n)/(Zo+1),++Zo)}},200)):(o.wheelDX+=r,o.wheelDY+=i))}}function Bn(e,t){var n=e[t];e.sort(function(e,t){return N(e.from(),t.from())}),t=p(e,n);for(var r=1;r<e.length;r++){var i=e[r],o=e[r-1];if(N(o.to(),i.from())>=0){var l=j(o.from(),i.from()),a=F(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;r<=t&&--t,e.splice(--r,2,new Xo(s?a:l,s?l:a))}}return new Yo(e,t)}function Hn(e,t){return new Yo([new Xo(e,t||e)],0)}function Wn(e){return e.text?P(e.from.line+e.text.length-1,m(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function qn(e,t){if(N(e,t.from)<0)return e;if(N(e,t.to)<=0)return Wn(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Wn(t).ch-t.to.ch),P(n,r)}function Un(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new Xo(qn(i.anchor,t),qn(i.head,t)))}return Bn(n,e.sel.primIndex)}function Gn(e,t,n){return e.line==t.line?P(n.line,e.ch-t.ch+n.ch):P(n.line+(e.line-t.line),e.ch)}function Kn(e){e.doc.mode=ke(e.options,e.doc.modeOption),$n(e)}function $n(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Dn(e,100),e.state.modeGen++,e.curOp&&En(e)}function Zn(e,t){return 0==t.from.ch&&0==t.to.ch&&""==m(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Qn(e,t,n,r){function i(e){return n?n[e]:null}function o(e,n,i){!function(e,t,r,i){e.text=n,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),K(e),$(e,r);var o=i?i(e):1;o!=e.height&&k(e,o)}(e,0,i,r),Qe(e,"change",e,t)}function l(e,t){for(var n=[],o=e;o<t;++o)n.push(new Fo(u[o],i(o),r));return n}var a=t.from,s=t.to,u=t.text,c=S(e,a.line),d=S(e,s.line),p=m(u),f=i(u.length-1),h=s.line-a.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(Zn(e,t)){var g=l(0,u.length-1);o(d,d.text,f),h&&e.remove(a.line,h),g.length&&e.insert(a.line,g)}else if(c==d)if(1==u.length)o(c,c.text.slice(0,a.ch)+p+c.text.slice(s.ch),f);else{var y=l(1,u.length-1);y.push(new Fo(p+c.text.slice(s.ch),f,r)),o(c,c.text.slice(0,a.ch)+u[0],i(0)),e.insert(a.line+1,y)}else if(1==u.length)o(c,c.text.slice(0,a.ch)+u[0]+d.text.slice(s.ch),i(0)),e.remove(a.line+1,h);else{o(c,c.text.slice(0,a.ch)+u[0],i(0)),o(d,p+d.text.slice(s.ch),f);var v=l(1,u.length-1);h>1&&e.remove(a.line+1,h-1),e.insert(a.line+1,v)}Qe(e,"change",e,t)}function Yn(e,t,n){function r(e,i,o){if(e.linked)for(var l=0;l<e.linked.length;++l){var a=e.linked[l];if(a.doc!=i){var s=o&&a.sharedHist;n&&!s||(t(a.doc,s),r(a.doc,e,s))}}}r(e,null,!0)}function Xn(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Bt(e),Kn(e),Jn(e),e.options.lineWrapping||ue(e),e.options.mode=t.modeOption,En(e)}function Jn(e){("rtl"==e.doc.direction?a:oo)(e.display.lineDiv,"CodeMirror-rtl")}function er(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function tr(e,t){var n={from:L(t.from),to:Wn(t),text:O(e,t.from,t.to)};return or(e,n,t.from.line,t.to.line+1),Yn(e,function(e){return or(e,n,t.from.line,t.to.line+1)},!0),n}function nr(e){for(;e.length&&m(e).ranges;)e.pop()}function rr(e,t,n,r){var i=e.history;i.undone.length=0;var o,l,a=+new Date;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>a-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=function(e,t){return i.lastOp==r?(nr(e.done),m(e.done)):e.done.length&&!m(e.done).ranges?m(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),m(e.done)):void 0}(i)))l=m(o.changes),0==N(t.from,t.to)&&0==N(t.from,l.to)?l.to=Wn(t):o.changes.push(tr(e,t));else{var s=m(i.done);for(s&&s.ranges||ir(e.sel,i.done),o={changes:[tr(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,l||he(e,"historyAdded")}function ir(e,t){var n=m(t);n&&n.ranges&&n.equals(e)||t.push(e)}function or(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function lr(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function ar(e,t){var n=function(t,n){var r=n["spans_"+e.id];if(!r)return null;for(var i=[],o=0;o<n.text.length;++o)i.push(lr(r[o]));return i}(0,t),r=U(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var o=n[i],l=r[i];if(o&&l)e:for(var a=0;a<l.length;++a){for(var s=l[a],u=0;u<o.length;++u)if(o[u].marker==s.marker)continue e;o.push(s)}else l&&(n[i]=l)}return n}function sr(e,t,n){for(var r=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)r.push(n?Yo.prototype.deepCopy.call(o):o);else{var l=o.changes,a=[];r.push({changes:a});for(var s=0;s<l.length;++s){var u=l[s],c=void 0;if(a.push({from:u.from,to:u.to,text:u.text}),t)for(var d in u)(c=d.match(/^spans_(\d+)$/))&&p(t,Number(c[1]))>-1&&(m(a)[d]=u[d],delete u[d])}}}return r}function ur(e,t,n,r){if(r){var i=e.anchor;if(n){var o=N(t,i)<0;o!=N(n,i)<0?(i=t,t=n):o!=N(t,n)<0&&(t=n)}return new Xo(i,t)}return new Xo(n||t,t)}function cr(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),mr(e,new Yo([ur(e.sel.primary(),t,n,i)],0),r)}function dr(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)r[o]=ur(e.sel.ranges[o],t[o],null,i);mr(e,Bn(r,e.sel.primIndex),n)}function pr(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,mr(e,Bn(i,e.sel.primIndex),r)}function fr(e,t,n,r){mr(e,Hn(t,n),r)}function hr(e,t,n){var r=e.history.done,i=m(r);i&&i.ranges?(r[r.length-1]=t,gr(e,t,n)):mr(e,t,n)}function mr(e,t,n){gr(e,t,n),function(t,n,r,i){var o=e.history,l=i&&i.origin;r==o.lastSelOp||l&&o.lastSelOrigin==l&&(o.lastModTime==o.lastSelTime&&o.lastOrigin==l||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,l,m(o.done),n))?o.done[o.done.length-1]=n:ir(n,o.done),o.lastSelTime=+new Date,o.lastSelOrigin=l,o.lastSelOp=r,i&&!1!==i.clearRedo&&nr(o.undone)}(0,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function gr(e,t,n){(ye(e,"beforeSelectionChange")||e.cm&&ye(e.cm,"beforeSelectionChange"))&&(t=function(e,t,r){var i={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new Xo(z(e,t[n].anchor),z(e,t[n].head))},origin:n&&n.origin};return he(e,"beforeSelectionChange",e,i),e.cm&&he(e.cm,"beforeSelectionChange",e.cm,i),i.ranges!=t.ranges?Bn(i.ranges,i.ranges.length-1):t}(e,t)),yr(e,br(e,t,n&&n.bias||(N(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),n&&!1===n.scroll||!e.cm||an(e.cm)}function yr(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,ge(e.cm)),Qe(e,"cursorActivity",e))}function vr(e){yr(e,br(e,e.sel,null,!1))}function br(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],a=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=wr(e,l.anchor,a&&a.anchor,n,r),u=wr(e,l.head,a&&a.head,n,r);(i||s!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new Xo(s,u))}return i?Bn(i,t.primIndex):t}function _r(e,t,n,r,i){var o=S(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var a=o.markedSpans[l],s=a.marker;if((null==a.from||(s.inclusiveLeft?a.from<=t.ch:a.from<t.ch))&&(null==a.to||(s.inclusiveRight?a.to>=t.ch:a.to>t.ch))){if(i&&(he(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!s.atomic)continue;if(n){var u=s.find(r<0?1:-1),c=void 0;if((r<0?s.inclusiveRight:s.inclusiveLeft)&&(u=xr(e,u,-r,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=N(u,n))&&(r<0?c<0:c>0))return _r(e,u,t,r,i)}var d=s.find(r<0?-1:1);return(r<0?s.inclusiveLeft:s.inclusiveRight)&&(d=xr(e,d,r,d.line==t.line?o:null)),d?_r(e,d,t,r,i):null}}return t}function wr(e,t,n,r,i){var o=r||1;return _r(e,t,n,o,i)||!i&&_r(e,t,n,o,!0)||_r(e,t,n,-o,i)||!i&&_r(e,t,n,-o,!0)||(e.cantEdit=!0,P(e.first,0))}function xr(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?z(e,P(t.line-1)):null:n>0&&t.ch==(r||S(e,t.line)).text.length?t.line<e.first+e.size-1?P(t.line+1,0):null:new P(t.line,t.ch+n)}function Cr(e){e.setSelection(P(e.firstLine(),0),P(e.lastLine()),fo)}function Er(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return r.canceled=!0}};return n&&(r.update=function(t,n,i,o){t&&(r.from=z(e,t)),n&&(r.to=z(e,n)),i&&(r.text=i),void 0!==o&&(r.origin=o)}),he(e,"beforeChange",e,r),e.cm&&he(e.cm,"beforeChange",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function Sr(e,t,n){if(e.cm){if(!e.cm.curOp)return wn(e.cm,Sr)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(ye(e,"beforeChange")||e.cm&&ye(e.cm,"beforeChange"))||(t=Er(e,t,!0))){var r=bo&&!n&&function(t,n,r){var i=null;if(e.iter(n.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||i&&-1!=p(i,n)||(i||(i=[])).push(n)}}),!i)return null;for(var o=[{from:n,to:r}],l=0;l<i.length;++l)for(var a=i[l],s=a.find(0),u=0;u<o.length;++u){var c=o[u];if(!(N(c.to,s.from)<0||N(c.from,s.to)>0)){var d=[u,1],f=N(c.from,s.from),h=N(c.to,s.to);(f<0||!a.inclusiveLeft&&!f)&&d.push({from:c.from,to:s.from}),(h>0||!a.inclusiveRight&&!h)&&d.push({from:s.to,to:c.to}),o.splice.apply(o,d),u+=d.length-3}}return o}(0,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)Or(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else Or(e,t)}}function Or(e,t){if(1!=t.text.length||""!=t.text[0]||0!=N(t.from,t.to)){var n=Un(e,t);rr(e,t,n,e.cm?e.cm.curOp.id:NaN),Dr(e,t,n,U(e,t));var r=[];Yn(e,function(e,n){n||-1!=p(r,e.history)||(Pr(e.history,t),r.push(e.history)),Dr(e,t,null,U(e,t))})}}function Tr(e,t,n){if(!e.cm||!e.cm.state.suppressEdits||n){for(var r,i=e.history,o=e.sel,l="undo"==t?i.done:i.undone,a="undo"==t?i.undone:i.done,s=0;s<l.length&&(r=l[s],n?!r.ranges||r.equals(e.sel):r.ranges);s++);if(s!=l.length){for(i.lastOrigin=i.lastSelOrigin=null;(r=l.pop()).ranges;){if(ir(r,a),n&&!r.equals(e.sel))return void mr(e,r,{clearRedo:!1});o=r}var u=[];ir(o,a),a.push({changes:u,generation:i.generation}),i.generation=r.generation||++i.maxGeneration;for(var c=ye(e,"beforeChange")||e.cm&&ye(e.cm,"beforeChange"),d=function(n){var i=r.changes[n];if(i.origin=t,c&&!Er(e,i,!1))return l.length=0,{};u.push(tr(e,i));var o=n?Un(e,i):m(l);Dr(e,i,o,ar(e,i)),!n&&e.cm&&e.cm.scrollIntoView({from:i.from,to:Wn(i)});var a=[];Yn(e,function(e,t){t||-1!=p(a,e.history)||(Pr(e.history,i),a.push(e.history)),Dr(e,i,null,ar(e,i))})},f=r.changes.length-1;f>=0;--f){var h=d(f);if(h)return h.v}}}}function kr(e,t){if(0!=t&&(e.first+=t,e.sel=new Yo(g(e.sel.ranges,function(e){return new Xo(P(e.anchor.line+t,e.anchor.ch),P(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){En(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)Sn(e.cm,r,"gutter")}}function Dr(e,t,n,r){if(e.cm&&!e.cm.curOp)return wn(e.cm,Dr)(e,t,n,r);if(t.to.line<e.first)kr(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);kr(e,i),t={from:P(e.first,0),to:P(t.to.line+i,t.to.ch),text:[m(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:P(o,S(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=O(e,t.from,t.to),n||(n=Un(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,l=t.to,a=!1,s=o.line;e.options.lineWrapping||(s=D(ne(S(r,o.line))),r.iter(s,l.line+1,function(e){if(e==i.maxLine)return a=!0,!0})),r.sel.contains(t.from,t.to)>-1&&ge(e),Qn(r,t,n,zt(e)),e.options.lineWrapping||(r.iter(s,o.line+t.text.length,function(e){var t=se(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,a=!1)}),a&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,r=t-1;r>n;r--){var i=S(e,r).stateAfter;if(i&&(!(i instanceof No)||r+i.lookAhead<t)){n=r+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}}(r,o.line),Dn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?En(e):o.line!=l.line||1!=t.text.length||Zn(e.doc,t)?En(e,o.line,l.line+1,u):Sn(e,o.line,"text");var c=ye(e,"changes"),d=ye(e,"change");if(d||c){var p={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};d&&Qe(e,"change",e,p),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(p)}e.display.selForContextMenu=null}(e.cm,t,r):Qn(e,t,r),gr(e,n,fo)}}function Ir(e,t,n,r,i){if(r||(r=n),N(r,n)<0){var o;n=(o=[r,n])[0],r=o[1]}"string"==typeof t&&(t=e.splitLines(t)),Sr(e,{from:n,to:r,text:t,origin:i})}function Rr(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function Mr(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var a=0;a<o.ranges.length;a++)Rr(o.ranges[a].anchor,t,n,r),Rr(o.ranges[a].head,t,n,r)}else{for(var s=0;s<o.changes.length;++s){var u=o.changes[s];if(n<u.from.line)u.from=P(u.from.line+r,u.from.ch),u.to=P(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function Pr(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;Mr(e.done,n,r,i),Mr(e.undone,n,r,i)}function Nr(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=S(e,V(e,t)):i=D(t),null==i?null:(r(o,i)&&e.cm&&Sn(e.cm,i,n),o)}function Ar(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function Lr(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}function Fr(e,t,n){ae(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&ln(e,n)}function jr(e,t,n,r,o){if(r&&r.shared)return function(e,t,n,r,i){(r=c(r)).shared=!1;var o=[jr(e,t,n,r,i)],l=o[0],a=r.widgetNode;return Yn(e,function(e){a&&(r.widgetNode=a.cloneNode(!0)),o.push(jr(e,z(e,t),z(e,n),r,i));for(var s=0;s<e.linked.length;++s)if(e.linked[s].isParent)return;l=m(o)}),new nl(o,l)}(e,t,n,r,o);if(e.cm&&!e.cm.curOp)return wn(e.cm,jr)(e,t,n,r,o);var l=new tl(e,o),a=N(t,n);if(r&&c(r,l,!1),a>0||0==a&&!1!==l.clearWhenEmpty)return l;if(l.replacedWith&&(l.collapsed=!0,l.widgetNode=i("span",[l.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||l.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(l.widgetNode.insertLeft=!0)),l.collapsed){if(te(e,t.line,t,n,l)||t.line!=n.line&&te(e,n.line,t,n,l))throw new Error("Inserting collapsed marker partially overlapping an existing one");_o=!0}l.addToHistory&&rr(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,u=t.line,d=e.cm;if(e.iter(u,n.line+1,function(e){d&&l.collapsed&&!d.options.lineWrapping&&ne(e)==d.display.maxLine&&(s=!0),l.collapsed&&u!=t.line&&k(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new H(l,u==t.line?t.ch:null,u==n.line?n.ch:null)),++u}),l.collapsed&&e.iter(t.line,n.line+1,function(t){oe(e,t)&&k(t,0)}),l.clearOnEnter&&Eo(l,"beforeCursorEnter",function(){return l.clear()}),l.readOnly&&(bo=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),l.collapsed&&(l.id=++el,l.atomic=!0),d){if(s&&(d.curOp.updateMaxLine=!0),l.collapsed)En(d,t.line,n.line+1);else if(l.className||l.title||l.startStyle||l.endStyle||l.css)for(var p=t.line;p<=n.line;p++)Sn(d,p,"text");l.atomic&&vr(d.doc),Qe(d,"markerAdded",d,l)}return l}function Vr(e){return e.findMarks(P(e.first,0),e.clipPos(P(e.lastLine())),function(e){return e.parent})}function zr(e){for(var t=function(t){var n=e[t],r=[n.primary.doc];Yn(n.primary.doc,function(e){return r.push(e)});for(var i=0;i<n.markers.length;i++){var o=n.markers[i];-1==p(r,o.doc)&&(o.parent=null,n.markers.splice(i--,1))}},n=0;n<e.length;n++)t(n)}function Br(e){var t=this;if(Hr(t),!me(t,e)&&!at(t.display,e)){be(e),zi&&(ol=+new Date);var n=Ht(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var i=r.length,o=Array(i),l=0,a=function(e,r){if(!t.options.allowDropFileTypes||-1!=p(t.options.allowDropFileTypes,e.type)){var a=new FileReader;a.onload=wn(t,function(){var e=a.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[r]=e,++l==i){var s={from:n=z(t.doc,n),to:n,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Sr(t.doc,s),hr(t.doc,Hn(n,Wn(s)))}}),a.readAsText(e)}},s=0;s<i;++s)a(r[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var u=e.dataTransfer.getData("Text");if(u){var c;if(t.state.draggingText&&!t.state.draggingText.copy&&(c=t.listSelections()),gr(t.doc,Hn(n,n)),c)for(var d=0;d<c.length;++d)Ir(t.doc,"",c[d].anchor,c[d].head,"drag");t.replaceSelection(u,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Hr(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Wr(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),n=0;n<t.length;n++){var r=t[n].CodeMirror;r&&e(r)}}function qr(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function Ur(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var n,r,i,o,l=0;l<t.length-1;l++){var a=t[l];if(/^(cmd|meta|m)$/i.test(a))o=!0;else if(/^a(lt)?$/i.test(a))n=!0;else if(/^(c|ctrl|control)$/i.test(a))r=!0;else{if(!/^s(hift)?$/i.test(a))throw new Error("Unrecognized modifier name: "+a);i=!0}}return n&&(e="Alt-"+e),r&&(e="Ctrl-"+e),o&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function Gr(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==r){delete e[n];continue}for(var i=g(n.split(" "),Ur),o=0;o<i.length;o++){var l=void 0,a=void 0;o==i.length-1?(a=i.join(" "),l=r):(a=i.slice(0,o+1).join(" "),l="...");var s=t[a];if(s){if(s!=l)throw new Error("Inconsistent bindings for "+a)}else t[a]=l}delete e[n]}for(var u in t)e[u]=t[u];return e}function Kr(e,t,n,r){var i=(t=Yr(t)).call?t.call(e,r):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Kr(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var l=Kr(e,t.fallthrough[o],n,r);if(l)return l}}}function $r(e){var t="string"==typeof e?e:al[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Zr(e,t,n){var r=e;return t.altKey&&"Alt"!=r&&(e="Alt-"+e),(ro?t.metaKey:t.ctrlKey)&&"Ctrl"!=r&&(e="Ctrl-"+e),(ro?t.ctrlKey:t.metaKey)&&"Cmd"!=r&&(e="Cmd-"+e),!n&&t.shiftKey&&"Shift"!=r&&(e="Shift-"+e),e}function Qr(e,t){if(Ui&&34==e.keyCode&&e.char)return!1;var n=al[e.keyCode];return null!=n&&!e.altGraphKey&&Zr(n,e,t)}function Yr(e){return"string"==typeof e?dl[e]:e}function Xr(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=t(n[i]);r.length&&N(o.from,m(r).to)<=0;){var l=r.pop();if(N(l.from,o.from)<0){o.from=l.from;break}}r.push(o)}_n(e,function(){for(var t=r.length-1;t>=0;t--)Ir(e.doc,"",r[t].from,r[t].to,"+delete");an(e)})}function Jr(e,t,n){var r=C(e.text,t+n,n);return r<0||r>e.text.length?null:r}function ei(e,t,n){var r=Jr(e,t.ch,n);return null==r?null:new P(t.line,r,n<0?"after":"before")}function ti(e,t,n,r,i){if(e){var o=de(n,t.doc.direction);if(o){var l,a=i<0?m(o):o[0],s=i<0==(1==a.level)?"after":"before";if(a.level>0||"rtl"==t.doc.direction){var u=yt(t,n),c=vt(t,u,l=i<0?n.text.length-1:0).top;l=E(function(e){return vt(t,u,e).top==c},i<0==(1==a.level)?a.from:a.to-1,l),"before"==s&&(l=Jr(n,l,1))}else l=i<0?a.to:a.from;return new P(r,l,s)}}return new P(r,i<0?n.text.length:0,i<0?"before":"after")}function ni(e,t){var n=S(e.doc,t),r=ne(n);return r!=n&&(t=D(r)),ti(!0,e,r,t,1)}function ri(e,t){var n=ni(e,t.line),r=S(e.doc,n.line),i=de(r,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,r.text.search(/\S/));return P(n.line,t.line==n.line&&t.ch<=o&&t.ch?0:o,n.sticky)}return n}function ii(e,t,n){if("string"==typeof t&&!(t=pl[t]))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=po}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}function oi(e,t,n,r){var i=e.state.keySeq;if(i){if($r(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:fl.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),li(e,i+" "+t,n,r))return!0}return li(e,t,n,r)}function li(e,t,n,r){var i=function(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=Kr(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&Kr(t,e.options.extraKeys,n,e)||Kr(t,e.options.keyMap,n,e)}(e,t,r);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&Qe(e,"keyHandled",e,t,n),"handled"!=i&&"multi"!=i||(be(n),$t(e)),!!i}function ai(e,t){var n=Qr(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?oi(e,"Shift-"+n,t,function(t){return ii(e,t,!0)})||oi(e,n,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return ii(e,t)}):oi(e,n,t,function(t){return ii(e,t)}))}function si(e){if(this.curOp.focus=l(),!me(this,e)){zi&&Bi<11&&27==e.keyCode&&(e.returnValue=!1);var t=e.keyCode;this.display.shift=16==t||e.shiftKey;var n=ai(this,e);Ui&&(hl=n?t:null,!n&&88==t&&!ko&&(Xi?e.metaKey:e.ctrlKey)&&this.replaceSelection("",null,"cut")),18!=t||/\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className)||function(e){function t(e){18!=e.keyCode&&e.altKey||(oo(n,"CodeMirror-crosshair"),fe(document,"keyup",t),fe(document,"mouseover",t))}var n=e.display.lineDiv;a(n,"CodeMirror-crosshair"),Eo(document,"keyup",t),Eo(document,"mouseover",t)}(this)}}function ui(e){16==e.keyCode&&(this.doc.sel.shift=!1),me(this,e)}function ci(e){if(!(at(this.display,e)||me(this,e)||e.ctrlKey&&!e.altKey||Xi&&e.metaKey)){var t=e.keyCode,n=e.charCode;if(Ui&&t==hl)return hl=null,void be(e);if(!Ui||e.which&&!(e.which<10)||!ai(this,e)){var r=String.fromCharCode(null==n?t:n);"\b"!=r&&(function(t,n,i){return oi(t,"'"+r+"'",e,function(e){return ii(t,e,!0)})}(this)||this.display.input.onKeyPress(e))}}}function di(e){var t=this.display;if(!(me(this,e)||t.activeTouch&&t.input.supportsTouch()))if(t.input.ensurePolled(),t.shift=e.shiftKey,at(t,e))Hi||(t.scroller.draggable=!1,setTimeout(function(){return t.scroller.draggable=!0},100));else if(!hi(this,e)){var n=Ht(this,e),r=Ee(e),i=n?function(e,t){var n=+new Date;return yl&&yl.compare(n,e,t)?(gl=yl=null,"triple"):gl&&gl.compare(n,e,t)?(yl=new ml(n,e,t),gl=null,"double"):(gl=new ml(n,e,t),yl=null,"single")}(n,r):"single";window.focus(),1==r&&this.state.selectingText&&this.state.selectingText(e),n&&function(e,t,n,o,l){var a="Click";return"double"==i?a="Double"+a:"triple"==i&&(a="Triple"+a),a=(1==r?"Left":2==r?"Middle":"Right")+a,oi(e,Zr(a,l),l,function(t){if("string"==typeof t&&(t=pl[t]),!t)return!1;var r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r=t(e,n)!=po}finally{e.state.suppressEdits=!1}return r})}(this,0,n,0,e)||(1==r?n?function(e,t,n,r){zi?setTimeout(u(Zt,e),0):e.curOp.focus=l();var i,o=function(e,t,n){var r=e.getOption("configureMouse"),i=r?r(e,t,n):{};if(null==i.unit){i.unit=(Ji?n.shiftKey&&n.metaKey:n.altKey)?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||n.shiftKey),null==i.addNew&&(i.addNew=Xi?n.metaKey:n.ctrlKey),null==i.moveOnDrag&&(i.moveOnDrag=!(Xi?n.altKey:n.ctrlKey)),i}(e,n,r),a=e.doc.sel;e.options.dragDrop&&So&&!e.isReadOnly()&&"single"==n&&(i=a.contains(t))>-1&&(N((i=a.ranges[i]).from(),t)<0||t.xRel>0)&&(N(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,o=!1,l=wn(e,function(t){Hi&&(i.scroller.draggable=!1),e.state.draggingText=!1,fe(document,"mouseup",l),fe(document,"mousemove",a),fe(i.scroller,"dragstart",s),fe(i.scroller,"drop",l),o||(be(t),r.addNew||cr(e.doc,n,null,null,r.extend),Hi||zi&&9==Bi?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())}),a=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},s=function(){return o=!0};Hi&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),Eo(document,"mouseup",l),Eo(document,"mousemove",a),Eo(i.scroller,"dragstart",s),Eo(i.scroller,"drop",l),Qt(e),setTimeout(function(){return i.input.focus()},20)}(e,r,t,o):function(e,t,n,r){function i(t){var o=++v,h=Ht(e,t,!0,"rectangle"==r.unit);if(h)if(0!=N(h,g)){e.curOp.focus=l(),function(t){if(0!=N(g,t))if(g=t,"rectangle"==r.unit){for(var i=[],o=e.options.tabSize,l=d(S(s,n.line).text,n.ch,o),a=d(S(s,t.line).text,t.ch,o),h=Math.min(l,a),m=Math.max(l,a),y=Math.min(n.line,t.line),v=Math.min(e.lastLine(),Math.max(n.line,t.line));y<=v;y++){var b=S(s,y).text,_=f(b,h,o);h==m?i.push(new Xo(P(y,_),P(y,_))):b.length>_&&i.push(new Xo(P(y,_),P(y,f(b,m,o))))}i.length||i.push(new Xo(n,n)),mr(s,Bn(p.ranges.slice(0,c).concat(i),c),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var w,x=u,C=pi(e,t,r.unit),E=x.anchor;N(C.anchor,E)>0?(w=C.head,E=j(x.from(),C.anchor)):(w=C.anchor,E=F(x.to(),C.head));var O=p.ranges.slice(0);O[c]=function(e,t){var n=t.anchor,r=t.head,i=S(e.doc,n.line);if(0==N(n,r)&&n.sticky==r.sticky)return t;var o=de(i);if(!o)return t;var l=ce(o,n.ch,n.sticky),a=o[l];if(a.from!=n.ch&&a.to!=n.ch)return t;var s=l+(a.from==n.ch==(1!=a.level)?0:1);if(0==s||s==o.length)return t;var u;if(r.line!=n.line)u=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ce(o,r.ch,r.sticky),d=c-l||(r.ch-n.ch)*(1==a.level?-1:1);u=c==s-1||c==s?d<0:d>0}var p=o[s+(u?-1:0)],f=u==(1==p.level),h=f?p.from:p.to,m=f?"after":"before";return n.ch==h&&n.sticky==m?t:new Xo(new P(n.line,h,m),r)}(e,new Xo(z(s,E),w)),mr(s,Bn(O,c),ho)}}(h);var m=tn(a,s);(h.line>=m.to||h.line<m.from)&&setTimeout(wn(e,function(){v==o&&i(t)}),150)}else{var b=t.clientY<y.top?-20:t.clientY>y.bottom?20:0;b&&setTimeout(wn(e,function(){v==o&&(a.scroller.scrollTop+=b,i(t))}),50)}}function o(t){e.state.selectingText=!1,v=1/0,be(t),a.input.focus(),fe(document,"mousemove",b),fe(document,"mouseup",_),s.history.lastSelOrigin=null}var a=e.display,s=e.doc;be(t);var u,c,p=s.sel,h=p.ranges;if(r.addNew&&!r.extend?(c=s.sel.contains(n),u=c>-1?h[c]:new Xo(n,n)):(u=s.sel.primary(),c=s.sel.primIndex),"rectangle"==r.unit)r.addNew||(u=new Xo(n,n)),n=Ht(e,t,!0,!0),c=-1;else{var m=pi(e,n,r.unit);u=r.extend?ur(u,m.anchor,m.head,r.extend):m}r.addNew?-1==c?(c=h.length,mr(s,Bn(h.concat([u]),c),{scroll:!1,origin:"*mouse"})):h.length>1&&h[c].empty()&&"char"==r.unit&&!r.extend?(mr(s,Bn(h.slice(0,c).concat(h.slice(c+1)),0),{scroll:!1,origin:"*mouse"}),p=s.sel):pr(s,c,u,ho):(c=0,mr(s,new Yo([u],0),ho),p=s.sel);var g=n,y=a.wrapper.getBoundingClientRect(),v=0,b=wn(e,function(e){Ee(e)?i(e):o(e)}),_=wn(e,o);e.state.selectingText=_,Eo(document,"mousemove",b),Eo(document,"mouseup",_)}(e,r,t,o)}(this,n,i,e):Ce(e)==t.scroller&&be(e):2==r?(n&&cr(this.doc,n),setTimeout(function(){return t.input.focus()},20)):3==r&&(io?mi(this,e):Qt(this)))}}function pi(e,t,n){if("char"==n)return new Xo(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Xo(P(t.line,0),z(e.doc,P(t.line+1,0)));var r=n(e,t);return new Xo(r.from,r.to)}function fi(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&be(t);var l=e.display,a=l.lineDiv.getBoundingClientRect();if(o>a.bottom||!ye(e,n))return we(t);o-=a.top-l.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var u=l.gutters.childNodes[s];if(u&&u.getBoundingClientRect().right>=i)return he(e,n,e,I(e.doc,o),e.options.gutters[s],t),we(t)}}function hi(e,t){return fi(e,t,"gutterClick",!0)}function mi(e,t){at(e.display,t)||function(e,t){return!!ye(e,"gutterContextMenu")&&fi(e,t,"gutterContextMenu",!1)}(e,t)||me(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function gi(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),xt(e)}function yi(e){Ln(e),En(e),nn(e)}function vi(e,t,n){if(!t!=!(n&&n!=vl)){var r=e.display.dragFunctions,i=t?Eo:fe;i(e.display.scroller,"dragstart",r.start),i(e.display.scroller,"dragenter",r.enter),i(e.display.scroller,"dragover",r.over),i(e.display.scroller,"dragleave",r.leave),i(e.display.scroller,"drop",r.drop)}}function bi(e){e.options.lineWrapping?(a(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(oo(e.display.wrapper,"CodeMirror-wrap"),ue(e)),Bt(e),En(e),xt(e),setTimeout(function(){return mn(e)},100)}function _i(e,t){var o=this;if(!(this instanceof _i))return new _i(e,t);this.options=t=t?c(t):{},c(bl,t,!1),Fn(t);var l=t.value;"string"==typeof l&&(l=new il(l,t.mode,null,t.lineSeparator,t.direction)),this.doc=l;var a=new _i.inputStyles[t.inputStyle](this),s=this.display=new function(e,t,n){this.input=n,this.scrollbarFiller=r("div",null,"CodeMirror-scrollbar-filler"),this.scrollbarFiller.setAttribute("cm-not-content","true"),this.gutterFiller=r("div",null,"CodeMirror-gutter-filler"),this.gutterFiller.setAttribute("cm-not-content","true"),this.lineDiv=i("div",null,"CodeMirror-code"),this.selectionDiv=r("div",null,null,"position: relative; z-index: 1"),this.cursorDiv=r("div",null,"CodeMirror-cursors"),this.measure=r("div",null,"CodeMirror-measure"),this.lineMeasure=r("div",null,"CodeMirror-measure"),this.lineSpace=i("div",[this.measure,this.lineMeasure,this.selectionDiv,this.cursorDiv,this.lineDiv],null,"position: relative; outline: none");var o=i("div",[this.lineSpace],"CodeMirror-lines");this.mover=r("div",[o],null,"position: relative"),this.sizer=r("div",[this.mover],"CodeMirror-sizer"),this.sizerWidth=null,this.heightForcer=r("div",null,null,"position: absolute; height: "+co+"px; width: 1px;"),this.gutters=r("div",null,"CodeMirror-gutters"),this.lineGutter=null,this.scroller=r("div",[this.sizer,this.heightForcer,this.gutters],"CodeMirror-scroll"),this.scroller.setAttribute("tabIndex","-1"),this.wrapper=r("div",[this.scrollbarFiller,this.gutterFiller,this.scroller],"CodeMirror"),zi&&Bi<8&&(this.gutters.style.zIndex=-1,this.scroller.style.paddingRight=0),Hi||Li&&Yi||(this.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(this.wrapper):e(this.wrapper)),this.viewFrom=this.viewTo=t.first,this.reportedViewFrom=this.reportedViewTo=t.first,this.view=[],this.renderedView=null,this.externalMeasured=null,this.viewOffset=0,this.lastWrapHeight=this.lastWrapWidth=0,this.updateLineNumbers=null,this.nativeBarWidth=this.barHeight=this.barWidth=0,this.scrollbarsClipped=!1,this.lineNumWidth=this.lineNumInnerWidth=this.lineNumChars=null,this.alignWidgets=!1,this.cachedCharWidth=this.cachedTextHeight=this.cachedPaddingH=null,this.maxLine=null,this.maxLineLength=0,this.maxLineChanged=!1,this.wheelDX=this.wheelDY=this.wheelStartX=this.wheelStartY=null,this.shift=!1,this.selForContextMenu=null,this.activeTouch=null,n.init(this)}(e,l,a);s.wrapper.CodeMirror=this,Ln(this),gi(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),yn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new ao,keySeq:null,specialChars:null},t.autofocus&&!Yi&&s.input.focus(),zi&&Bi<11&&setTimeout(function(){return o.display.input.reset(!0)},20),function(e){function t(){o.activeTouch&&(l=setTimeout(function(){return o.activeTouch=null},1e3),(a=o.activeTouch).end=+new Date)}function i(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}var o=e.display;Eo(o.scroller,"mousedown",wn(e,di)),Eo(o.scroller,"dblclick",zi&&Bi<11?wn(e,function(t){if(!me(e,t)){var n=Ht(e,t);if(n&&!hi(e,t)&&!at(e.display,t)){be(t);var r=e.findWordAt(n);cr(e.doc,r.anchor,r.head)}}}):function(t){return me(e,t)||be(t)}),io||Eo(o.scroller,"contextmenu",function(t){return mi(e,t)});var l,a={end:0};Eo(o.scroller,"touchstart",function(t){if(!me(e,t)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(t)&&!hi(e,t)){o.input.ensurePolled(),clearTimeout(l);var n=+new Date;o.activeTouch={start:n,moved:!1,prev:n-a.end<=300?a:null},1==t.touches.length&&(o.activeTouch.left=t.touches[0].pageX,o.activeTouch.top=t.touches[0].pageY)}}),Eo(o.scroller,"touchmove",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),Eo(o.scroller,"touchend",function(n){var r=o.activeTouch;if(r&&!at(o,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var l,a=e.coordsChar(o.activeTouch,"page");l=!r.prev||i(r,r.prev)?new Xo(a,a):!r.prev.prev||i(r,r.prev.prev)?e.findWordAt(a):new Xo(P(a.line,0),z(e.doc,P(a.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),be(n)}t()}),Eo(o.scroller,"touchcancel",t),Eo(o.scroller,"scroll",function(){o.scroller.clientHeight&&(dn(e,o.scroller.scrollTop),fn(e,o.scroller.scrollLeft,!0),he(e,"scroll",e))}),Eo(o.scroller,"mousewheel",function(t){return zn(e,t)}),Eo(o.scroller,"DOMMouseScroll",function(t){return zn(e,t)}),Eo(o.wrapper,"scroll",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(t){me(e,t)||xe(t)},over:function(t){me(e,t)||(function(e,i){var o=Ht(e,t);if(o){var l=document.createDocumentFragment();Gt(e,o,l),e.display.dragCursor||(e.display.dragCursor=r("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),n(e.display.dragCursor,l)}}(e),xe(t))},start:function(t){return function(e,t){if(zi&&(!e.state.draggingText||+new Date-ol<100))xe(t);else if(!me(e,t)&&!at(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Gi)){var n=r("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Ui&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),Ui&&n.parentNode.removeChild(n)}}(e,t)},drop:wn(e,Br),leave:function(t){me(e,t)||Hr(e)}};var s=o.input.getField();Eo(s,"keyup",function(t){return ui.call(e,t)}),Eo(s,"keydown",wn(e,si)),Eo(s,"keypress",wn(e,ci)),Eo(s,"focus",function(t){return Yt(e,t)}),Eo(s,"blur",function(t){return Xt(e,t)})}(this),ll||(function(){var e;Eo(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Wr(qr)},100))}),Eo(window,"blur",function(){return Wr(Xt)})}(),ll=!0),vn(this),this.curOp.forceUpdate=!0,Xn(this,l),t.autofocus&&!Yi||this.hasFocus()?setTimeout(u(Yt,this),20):Xt(this);for(var d in _l)_l.hasOwnProperty(d)&&_l[d](o,t[d],vl);rn(this),t.finishInit&&t.finishInit(this);for(var p=0;p<wl.length;++p)wl[p](o);bn(this),Hi&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(s.lineDiv).textRendering&&(s.lineDiv.style.textRendering="auto")}function wi(e,t,n,r){var i,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?i=Ae(e,t).state:n="prev");var l=e.options.tabSize,a=S(o,t),s=d(a.text,null,l);a.stateAfter&&(a.stateAfter=null);var u,c=a.text.match(/^\s*/)[0];if(r||/\S/.test(a.text)){if("smart"==n&&((u=o.mode.indent(i,a.text.slice(c.length),a.text))==po||u>150)){if(!r)return;n="prev"}}else u=0,n="not";"prev"==n?u=t>o.first?d(S(o,t-1).text,null,l):0:"add"==n?u=s+e.options.indentUnit:"subtract"==n?u=s-e.options.indentUnit:"number"==typeof n&&(u=s+n),u=Math.max(0,u);var p="",f=0;if(e.options.indentWithTabs)for(var m=Math.floor(u/l);m;--m)f+=l,p+="\t";if(f<u&&(p+=h(u-f)),p!=c)return Ir(o,p,P(t,0),P(t,c.length),"+input"),a.stateAfter=null,!0;for(var g=0;g<o.sel.ranges.length;g++){var y=o.sel.ranges[g];if(y.head.line==t&&y.head.ch<c.length){var v=P(t,c.length);pr(o,g,new Xo(v,v));break}}}function xi(e){xl=e}function Ci(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r||(r=o.sel);var l=e.state.pasteIncoming||"paste"==i,a=Oo(t),s=null;if(l&&r.ranges.length>1)if(xl&&xl.text.join("\n")==t){if(r.ranges.length%xl.text.length==0){s=[];for(var u=0;u<xl.text.length;u++)s.push(o.splitLines(xl.text[u]))}}else a.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(s=g(a,function(e){return[e]}));for(var c,d=r.ranges.length-1;d>=0;d--){var p=r.ranges[d],f=p.from(),h=p.to();p.empty()&&(n&&n>0?f=P(f.line,f.ch-n):e.state.overwrite&&!l?h=P(h.line,Math.min(S(o,h.line).text.length,h.ch+m(a).length)):xl&&xl.lineWise&&xl.text.join("\n")==t&&(f=h=P(f.line,0))),c=e.curOp.updateInput;var y={from:f,to:h,text:s?s[d%s.length]:a,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};Sr(e.doc,y),Qe(e,"inputRead",e,y)}t&&!l&&Si(e,t),an(e),e.curOp.updateInput=c,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Ei(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||_n(t,function(){return Ci(t,n,0,null,"paste")}),!0}function Si(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var a=0;a<o.electricChars.length;a++)if(t.indexOf(o.electricChars.charAt(a))>-1){l=wi(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(S(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=wi(e,i.head.line,"smart"));l&&Qe(e,"electricInput",e,i.head.line)}}}function Oi(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,o={anchor:P(i,0),head:P(i+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function Ti(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function ki(){var e=r("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=r("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return Hi?e.style.width="1000px":e.setAttribute("wrap","off"),Zi&&(e.style.border="1px solid black"),Ti(e),t}function Di(e,t,n,r,i){function o(r){var o;if(null==(o=i?function(e,t,n,r){var i=de(t,e.doc.direction);if(!i)return ei(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=ce(i,n.ch,n.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(r>0?l.to>n.ch:l.from<n.ch))return ei(t,n,r);var a,s=function(e,n){return Jr(t,e instanceof P?e.ch:e,n)},u=function(n){return e.options.lineWrapping?(a=a||yt(e,t),Nt(e,t,a,n)):{begin:0,end:t.text.length}},c=u("before"==n.sticky?s(n,-1):n.ch);if("rtl"==e.doc.direction||1==l.level){var d=1==l.level==r<0,p=s(n,d?1:-1);if(null!=p&&(d?p<=l.to&&p<=c.end:p>=l.from&&p>=c.begin))return new P(n.line,p,d?"before":"after")}var f=function(e,t,r){for(var o=function(e,t){return t?new P(n.line,s(e,1),"before"):new P(n.line,e,"after")};e>=0&&e<i.length;e+=t){var l=i[e],a=t>0==(1!=l.level),u=a?r.begin:s(r.end,-1);if(l.from<=u&&u<l.to)return o(u,a);if(u=a?l.from:s(l.to,-1),r.begin<=u&&u<r.end)return o(u,a)}},h=f(o+r,r,c);if(h)return h;var m=r>0?c.end:s(c.begin,-1);return null==m||r>0&&m==t.text.length||!(h=f(r>0?0:i.length-1,r,u(m)))?null:h}(e.cm,s,t,n):ei(s,t,n))){if(r||!function(){var r=t.line+n;return!(r<e.first||r>=e.first+e.size)&&(t=new P(r,t.ch,t.sticky),s=S(e,r))}())return!1;t=ti(i,e.cm,s,t.line,n)}else t=o;return!0}var l=t,a=n,s=S(e,t.line);if("char"==r)o();else if("column"==r)o(!0);else if("word"==r||"group"==r)for(var u=null,c="group"==r,d=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(n<0)||o(!p);p=!1){var f=s.text.charAt(t.ch)||"\n",h=_(f,d)?"w":c&&"\n"==f?"n":!c||/\s/.test(f)?null:"p";if(!c||p||h||(h="s"),u&&u!=h){n<0&&(n=1,o(),t.sticky="after");break}if(h&&(u=h),n>0&&!o(!p))break}var m=wr(e,t,l,a,!0);return A(l,m)&&(m.hitSide=!0),m}function Ii(e,t,n,r){var i,o=e.doc,l=t.left;if("page"==r){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),s=Math.max(a-.5*Lt(e.display),3);i=(n>0?t.bottom:t.top)+n*s}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(var u;(u=Mt(e,l,i)).outside;){if(n<0?i<=0:i>=o.height){u.hitSide=!0;break}i+=5*n}return u}function Ri(e,t){var n=gt(e,t.line);if(!n||n.hidden)return null;var r=S(e.doc,t.line),i=ht(n,r,t.line),o=de(r,e.doc.direction),l="left";o&&(l=ce(o,t.ch)%2?"right":"left");var a=bt(i.map,t.ch,l);return a.offset="right"==a.collapse?a.end:a.start,a}function Mi(e,t){return t&&(e.bad=!0),e}function Pi(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Mi(e.clipPos(P(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var l=e.display.view[i];if(l.node==r)return function(e,t,n){function r(t,n,r){for(var i=-1;i<(d?d.length:0);i++)for(var o=i<0?c.map:d[i],l=0;l<o.length;l+=3){var a=o[l+2];if(a==t||a==n){var s=D(i<0?e.line:e.rest[i]),u=o[l]+r;return(r<0||a!=t)&&(u=o[l+(r?1:0)]),P(s,u)}}}var i=e.text.firstChild,l=!1;if(!t||!o(i,t))return Mi(P(D(e.line),0),!0);if(t==i&&(l=!0,t=i.childNodes[n],n=0,!t)){var a=e.rest?m(e.rest):e.line;return Mi(P(D(a),a.text.length),l)}var s=3==t.nodeType?t:null,u=t;for(s||1!=t.childNodes.length||3!=t.firstChild.nodeType||(s=t.firstChild,n&&(n=s.nodeValue.length));u.parentNode!=i;)u=u.parentNode;var c=e.measure,d=c.maps,p=r(s,u,n);if(p)return Mi(p,l);for(var f=u.nextSibling,h=s?s.nodeValue.length-n:0;f;f=f.nextSibling){if(p=r(f,f.firstChild,0))return Mi(P(p.line,p.ch-h),l);h+=f.textContent.length}for(var g=u.previousSibling,y=n;g;g=g.previousSibling){if(p=r(g,g.firstChild,-1))return Mi(P(p.line,p.ch+y),l);y+=g.textContent.length}}(l,t,n)}}var Ni=navigator.userAgent,Ai=navigator.platform,Li=/gecko\/\d/i.test(Ni),Fi=/MSIE \d/.test(Ni),ji=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Ni),Vi=/Edge\/(\d+)/.exec(Ni),zi=Fi||ji||Vi,Bi=zi&&(Fi?document.documentMode||6:+(Vi||ji)[1]),Hi=!Vi&&/WebKit\//.test(Ni),Wi=Hi&&/Qt\/\d+\.\d+/.test(Ni),qi=!Vi&&/Chrome\//.test(Ni),Ui=/Opera\//.test(Ni),Gi=/Apple Computer/.test(navigator.vendor),Ki=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(Ni),$i=/PhantomJS/.test(Ni),Zi=!Vi&&/AppleWebKit/.test(Ni)&&/Mobile\/\w+/.test(Ni),Qi=/Android/.test(Ni),Yi=Zi||Qi||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(Ni),Xi=Zi||/Mac/.test(Ai),Ji=/\bCrOS\b/.test(Ni),eo=/win/i.test(Ai),to=Ui&&Ni.match(/Version\/(\d*\.\d*)/);to&&(to=Number(to[1])),to&&to>=15&&(Ui=!1,Hi=!0);var no,ro=Xi&&(Wi||Ui&&(null==to||to<12.11)),io=Li||zi&&Bi>=9,oo=function(t,n){var r=t.className,i=e(n).exec(r);if(i){var o=r.slice(i.index+i[0].length);t.className=r.slice(0,i.index)+(o?i[1]+o:"")}};no=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r};var lo=function(e){e.select()};Zi?lo=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:zi&&(lo=function(e){try{e.select()}catch(e){}});var ao=function(){this.id=null};ao.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var so,uo,co=30,po={toString:function(){return"CodeMirror.Pass"}},fo={scroll:!1},ho={origin:"*mouse"},mo={origin:"+move"},go=[""],yo=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,vo=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,bo=!1,_o=!1,wo=null,xo=function(){function e(e){return e<=247?n.charAt(e):1424<=e&&e<=1524?"R":1536<=e&&e<=1785?r.charAt(e-1536):1774<=e&&e<=2220?"r":8192<=e&&e<=8203?"w":8204==e?"b":"L"}function t(e,t,n){this.level=e,this.from=t,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",r="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,l=/[LRr]/,a=/[Lb1n]/,s=/[1n]/;return function(n,r){var u="ltr"==r?"L":"R";if(0==n.length||"ltr"==r&&!i.test(n))return!1;for(var c=n.length,d=[],p=0;p<c;++p)d.push(e(n.charCodeAt(p)));for(var f=0,h=u;f<c;++f){var g=d[f];"m"==g?d[f]=h:h=g}for(var y=0,v=u;y<c;++y){var b=d[y];"1"==b&&"r"==v?d[y]="n":l.test(b)&&(v=b,"r"==b&&(d[y]="R"))}for(var _=1,w=d[0];_<c-1;++_){var x=d[_];"+"==x&&"1"==w&&"1"==d[_+1]?d[_]="1":","!=x||w!=d[_+1]||"1"!=w&&"n"!=w||(d[_]=w),w=x}for(var C=0;C<c;++C){var E=d[C];if(","==E)d[C]="N";else if("%"==E){var S=void 0;for(S=C+1;S<c&&"%"==d[S];++S);for(var O=C&&"!"==d[C-1]||S<c&&"1"==d[S]?"1":"N",T=C;T<S;++T)d[T]=O;C=S-1}}for(var k=0,D=u;k<c;++k){var I=d[k];"L"==D&&"1"==I?d[k]="L":l.test(I)&&(D=I)}for(var R=0;R<c;++R)if(o.test(d[R])){var M=void 0;for(M=R+1;M<c&&o.test(d[M]);++M);for(var P="L"==(R?d[R-1]:u),N=P==("L"==(M<c?d[M]:u))?P?"L":"R":u,A=R;A<M;++A)d[A]=N;R=M-1}for(var L,F=[],j=0;j<c;)if(a.test(d[j])){var V=j;for(++j;j<c&&a.test(d[j]);++j);F.push(new t(0,V,j))}else{var z=j,B=F.length;for(++j;j<c&&"L"!=d[j];++j);for(var H=z;H<j;)if(s.test(d[H])){z<H&&F.splice(B,0,new t(1,z,H));var W=H;for(++H;H<j&&s.test(d[H]);++H);F.splice(B,0,new t(2,W,H)),z=H}else++H;z<j&&F.splice(B,0,new t(1,z,j))}return"ltr"==r&&(1==F[0].level&&(L=n.match(/^\s+/))&&(F[0].from=L[0].length,F.unshift(new t(0,0,L[0].length))),1==m(F).level&&(L=n.match(/\s+$/))&&(m(F).to-=L[0].length,F.push(new t(0,c-L[0].length,c)))),"rtl"==r?F.reverse():F}}(),Co=[],Eo=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var r=e._handlers||(e._handlers={});r[t]=(r[t]||Co).concat(n)}},So=function(){if(zi&&Bi<9)return!1;var e=r("div");return"draggable"in e||"dragDrop"in e}(),Oo=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(n.push(o.slice(0,l)),t+=l+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},To=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},ko=function(){var e=r("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),Do=null,Io={},Ro={},Mo={},Po=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};Po.prototype.eol=function(){return this.pos>=this.string.length},Po.prototype.sol=function(){return this.pos==this.lineStart},Po.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Po.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Po.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Po.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Po.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Po.prototype.skipToEnd=function(){this.pos=this.string.length},Po.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Po.prototype.backUp=function(e){this.pos-=e},Po.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=d(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?d(this.string,this.lineStart,this.tabSize):0)},Po.prototype.indentation=function(){return d(this.string,null,this.tabSize)-(this.lineStart?d(this.string,this.lineStart,this.tabSize):0)},Po.prototype.match=function(e,t,n){if("string"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Po.prototype.current=function(){return this.string.slice(this.start,this.pos)},Po.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Po.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Po.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var No=function(e,t){this.state=e,this.lookAhead=t},Ao=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};Ao.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Ao.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Ao.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Ao.fromSaved=function(e,t,n){return t instanceof No?new Ao(e,Ie(e.mode,t.state),n,t.lookAhead):new Ao(e,Ie(e.mode,t),n)},Ao.prototype.save=function(e){var t=!1!==e?Ie(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new No(t,this.maxLookAhead):t};var Lo=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n},Fo=function(e,t,n){this.text=e,$(this,t),this.height=n?n(this):1};Fo.prototype.lineNo=function(){return D(this)},ve(Fo);var jo,Vo={},zo={},Bo=null,Ho=null,Wo={left:0,right:0,top:0,bottom:0},qo=function(e,t,n){this.cm=n;var i=this.vert=r("div",[r("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=r("div",[r("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(i),e(o),Eo(i,"scroll",function(){i.clientHeight&&t(i.scrollTop,"vertical")}),Eo(o,"scroll",function(){o.clientWidth&&t(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,zi&&Bi<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};qo.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},qo.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},qo.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},qo.prototype.zeroWidthHack=function(){this.horiz.style.height=this.vert.style.width=Xi&&!Ki?"12px":"18px",this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new ao,this.disableVert=new ao},qo.prototype.enableZeroWidthBar=function(e,t,n){function r(){var i=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,r)}e.style.pointerEvents="auto",t.set(1e3,r)},qo.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Uo=function(){};Uo.prototype.update=function(){return{bottom:0,right:0}},Uo.prototype.setScrollLeft=function(){},Uo.prototype.setScrollTop=function(){},Uo.prototype.clear=function(){};var Go={native:qo,null:Uo},Ko=0,$o=function(e,t,n){var r=e.display;this.viewport=t,this.visible=tn(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=pt(e),this.force=n,this.dims=jt(e),this.events=[]};$o.prototype.signal=function(e,t){ye(e,t)&&this.events.push(arguments)},$o.prototype.finish=function(){for(var e=0;e<this.events.length;e++)he.apply(null,this.events[e])};var Zo=0,Qo=null;zi?Qo=-.53:Li?Qo=15:qi?Qo=-.7:Gi&&(Qo=-1/3);var Yo=function(e,t){this.ranges=e,this.primIndex=t};Yo.prototype.primary=function(){return this.ranges[this.primIndex]},Yo.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!A(n.anchor,r.anchor)||!A(n.head,r.head))return!1}return!0},Yo.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new Xo(L(this.ranges[t].anchor),L(this.ranges[t].head));return new Yo(e,this.primIndex)},Yo.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},Yo.prototype.contains=function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(N(t,r.from())>=0&&N(e,r.to())<=0)return n}return-1};var Xo=function(e,t){this.anchor=e,this.head=t};Xo.prototype.from=function(){return j(this.anchor,this.head)},Xo.prototype.to=function(){return F(this.anchor,this.head)},Xo.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},Ar.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;n<r;++n){var i=this.lines[n];this.height-=i.height,He(i),Qe(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},Lr.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],i=r.chunkSize();if(e<i){var o=Math.min(t,i-e),l=r.height;if(r.removeInner(e,o),this.height-=l-r.height,i==o&&(this.children.splice(n--,1),r.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof Ar))){var a=[];this.collapse(a),this.children=[new Ar(a)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,n),i.lines&&i.lines.length>50){for(var l=i.lines.length%25+25,a=l;a<i.lines.length;){var s=new Ar(i.lines.slice(a,a+=25));i.height-=s.height,this.children.splice(++r,0,s),s.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new Lr(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var n=p(e.parent.children,e);e.parent.children.splice(n+1,0,t)}else{var r=new Lr(e.children);r.parent=e,e.children=[r,t],e=r}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0==(t-=l))break;e=0}else e-=o}}};var Jo=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};Jo.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=D(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=lt(this);k(n,Math.max(0,n.height-o)),e&&(_n(e,function(){Fr(e,n,-o),Sn(e,r,"widget")}),Qe(e,"lineWidgetCleared",e,this,r))}},Jo.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line;this.height=null;var i=lt(this)-t;i&&(k(r,r.height+i),n&&_n(n,function(){n.curOp.forceUpdate=!0,Fr(n,r,i),Qe(n,"lineWidgetChanged",n,e,D(r))}))},ve(Jo);var el=0,tl=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++el};tl.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&vn(e),ye(this,"clear")){var n=this.find();n&&Qe(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],a=W(l.markedSpans,this);e&&!this.collapsed?Sn(e,D(l),"text"):e&&(null!=a.to&&(i=D(l)),null!=a.from&&(r=D(l))),l.markedSpans=q(l.markedSpans,a),null==a.from&&this.collapsed&&!oe(this.doc,l)&&e&&k(l,Lt(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var s=0;s<this.lines.length;++s){var u=ne(this.lines[s]),c=se(u);c>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&En(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&vr(e.doc)),e&&Qe(e,"markerCleared",e,this,r,i),t&&bn(e),this.parent&&this.parent.clear()}},tl.prototype.find=function(e,t){null==e&&"bookmark"==this.type&&(e=1);for(var n,r,i=0;i<this.lines.length;++i){var o=this.lines[i],l=W(o.markedSpans,this);if(null!=l.from&&(n=P(t?o:D(o),l.from),-1==e))return n;if(null!=l.to&&(r=P(t?o:D(o),l.to),1==e))return r}return n&&{from:n,to:r}},tl.prototype.changed=function(){var e=this,t=this.find(-1,!0),n=this,r=this.doc.cm;t&&r&&_n(r,function(){var i=t.line,o=D(t.line),l=gt(r,o);if(l&&(_t(l),r.curOp.selectionChanged=r.curOp.forceUpdate=!0),r.curOp.updateMaxLine=!0,!oe(n.doc,i)&&null!=n.height){var a=n.height;n.height=null;var s=lt(n)-a;s&&k(i,i.height+s)}Qe(r,"markerChanged",r,e)})},tl.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=p(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},tl.prototype.detachLine=function(e){if(this.lines.splice(p(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},ve(tl);var nl=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};nl.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Qe(this,"clear")}},nl.prototype.find=function(e,t){return this.primary.find(e,t)},ve(nl);var rl=0,il=function(e,t,n,r,i){if(!(this instanceof il))return new il(e,t,n,r,i);null==n&&(n=0),Lr.call(this,[new Ar([new Fo("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=n;var o=P(n,0);this.sel=Hn(o),this.history=new er(null),this.id=++rl,this.modeOption=t,this.lineSep=r,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Qn(this,{from:o,to:o,text:e}),mr(this,Hn(o),fo)};il.prototype=v(Lr.prototype,{constructor:il,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=T(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Cn(function(e){var t=P(this.first,0),n=this.first+this.size-1;Sr(this,{from:t,to:P(n,S(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&sn(this.cm,0,0),mr(this,Hn(t),fo)}),replaceRange:function(e,t,n,r){Ir(this,e,t=z(this,t),n=n?z(this,n):t,r)},getRange:function(e,t,n){var r=O(this,z(this,e),z(this,t));return!1===n?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(R(this,e))return S(this,e)},getLineNumber:function(e){return D(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=S(this,e)),ne(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return z(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Cn(function(e,t,n){fr(this,z(this,"number"==typeof e?P(e,t||0):e),null,n)}),setSelection:Cn(function(e,t,n){fr(this,z(this,e),z(this,t||e),n)}),extendSelection:Cn(function(e,t,n){cr(this,z(this,e),t&&z(this,t),n)}),extendSelections:Cn(function(e,t){dr(this,B(this,e),t)}),extendSelectionsBy:Cn(function(e,t){dr(this,B(this,g(this.sel.ranges,e)),t)}),setSelections:Cn(function(e,t,n){if(e.length){for(var r=[],i=0;i<e.length;i++)r[i]=new Xo(z(this,e[i].anchor),z(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),mr(this,Bn(r,t),n)}}),addSelection:Cn(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new Xo(z(this,e),z(this,t||e))),mr(this,Bn(r,r.length-1),n)}),getSelection:function(e){for(var t,n=this.sel.ranges,r=0;r<n.length;r++){var i=O(this,n[r].from(),n[r].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=O(this,n[r].from(),n[r].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:Cn(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];r[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:n}}for(var a=t&&"end"!=t&&function(e,t,n){for(var r=[],i=P(e.first,0),o=i,l=0;l<t.length;l++){var a=t[l],s=Gn(a.from,i,o),u=Gn(Wn(a),i,o);if(i=a.to,o=u,"around"==n){var c=e.sel.ranges[l],d=N(c.head,c.anchor)<0;r[l]=new Xo(d?u:s,d?s:u)}else r[l]=new Xo(s,s)}return new Yo(r,e.sel.primIndex)}(this,r,t),s=r.length-1;s>=0;s--)Sr(this,r[s]);a?hr(this,a):this.cm&&an(this.cm)}),undo:Cn(function(){Tr(this,"undo")}),redo:Cn(function(){Tr(this,"redo")}),undoSelection:Cn(function(){Tr(this,"undo",!0)}),redoSelection:Cn(function(){Tr(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){this.history=new er(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:sr(this.history.done),undone:sr(this.history.undone)}},setHistory:function(e){var t=this.history=new er(this.history.maxGeneration);t.done=sr(e.done.slice(0),null,!0),t.undone=sr(e.undone.slice(0),null,!0)},setGutterMarker:Cn(function(e,t,n){return Nr(this,e,"gutter",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&w(r)&&(e.gutterMarkers=null),!0})}),clearGutter:Cn(function(e){var t=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&Nr(t,n,"gutter",function(){return n.gutterMarkers[e]=null,w(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!R(this,e))return null;if(t=e,!(e=S(this,e)))return null}else if(null==(t=D(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Cn(function(t,n,r){return Nr(this,t,"gutter"==n?"gutter":"class",function(t){var i="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass";if(t[i]){if(e(r).test(t[i]))return!1;t[i]+=" "+r}else t[i]=r;return!0})}),removeLineClass:Cn(function(t,n,r){return Nr(this,t,"gutter"==n?"gutter":"class",function(t){var i="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass",o=t[i];if(!o)return!1;if(null==r)t[i]=null;else{var l=o.match(e(r));if(!l)return!1;var a=l.index+l[0].length;t[i]=o.slice(0,l.index)+(l.index&&a!=o.length?" ":"")+o.slice(a)||null}return!0})}),addLineWidget:Cn(function(e,t,n){return function(e,r,i,o){var l=new Jo(e,t,n),a=e.cm;return a&&l.noHScroll&&(a.display.alignWidgets=!0),Nr(e,r,"widget",function(t){var n=t.widgets||(t.widgets=[]);if(null==l.insertAt?n.push(l):n.splice(Math.min(n.length-1,Math.max(0,l.insertAt)),0,l),l.line=t,a&&!oe(e,t)){var r=ae(t)<e.scrollTop;k(t,t.height+lt(l)),r&&ln(a,l.height),a.curOp.forceUpdate=!0}return!0}),Qe(a,"lineWidgetAdded",a,l,"number"==typeof r?r:D(r)),l}(this,e)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return jr(this,z(this,e),z(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=z(this,e),jr(this,e,e,n,"bookmark")},findMarksAt:function(e){var t=[],n=S(this,(e=z(this,e)).line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=z(this,e),t=z(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var a=0;a<l.length;a++){var s=l[a];null!=s.to&&i==e.line&&e.ch>=s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)null!=n[r].from&&e.push(n[r].marker)}),e},posFromIndex:function(e){var t,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+r;if(o>e)return t=e,!0;e-=o,++n}),z(this,P(n,t))},indexFromPos:function(e){var t=(e=z(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new il(T(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new il(T(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(N(o,l)){var a=jr(e,o,l,r.primary,r.primary.type);r.markers.push(a),a.parent=r}}}(r,Vr(this)),r},unlinkDoc:function(e){if(e instanceof _i&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t)if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),zr(Vr(this));break}if(e.history==this.history){var n=[e.id];Yn(e,function(e){return n.push(e.id)},!0),e.history=new er(null),e.history.done=sr(this.history.done,n),e.history.undone=sr(this.history.undone,n)}},iterLinkedDocs:function(e){Yn(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Oo(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Cn(function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&function(e){_n(e,function(){Jn(e),En(e)})}(this.cm))})}),il.prototype.eachLine=il.prototype.iter;for(var ol=0,ll=!1,al={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},sl=0;sl<10;sl++)al[sl+48]=al[sl+96]=String(sl);for(var ul=65;ul<=90;ul++)al[ul]=String.fromCharCode(ul);for(var cl=1;cl<=12;cl++)al[cl+111]=al[cl+63235]="F"+cl;var dl={};dl.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},dl.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},dl.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},dl.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},dl.default=Xi?dl.macDefault:dl.pcDefault;var pl={selectAll:Cr,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),fo)},killLine:function(e){return Xr(e,function(t){if(t.empty()){var n=S(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:P(t.head.line+1,0)}:{from:t.head,to:P(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return Xr(e,function(t){return{from:P(t.from().line,0),to:z(e.doc,P(t.to().line+1,0))}})},delLineLeft:function(e){return Xr(e,function(e){return{from:P(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return Xr(e,function(t){var n=e.charCoords(t.head,"div").top+5;return{from:e.coordsChar({left:0,top:n},"div"),to:t.from()}})},delWrappedLineRight:function(e){return Xr(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:r}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(P(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(P(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return ni(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return ri(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return function(e,t){var n=S(e.doc,t),r=function(e){for(var t;t=ee(e);)e=t.find(1,!0).line;return e}(n);return r!=n&&(t=D(r)),ti(!0,e,n,t,-1)}(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")},mo)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")},mo)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return r.ch<e.getLine(r.line).search(/\S/)?ri(e,t.head):r},mo)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),l=d(e.getLine(o.line),o.ch,r);t.push(h(r-l%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return _n(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++)if(t[r].empty()){var i=t[r].head,o=S(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new P(i.line,i.ch-1)),i.ch>0)i=new P(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),P(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=S(e.doc,i.line-1).text;l&&(i=new P(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),P(i.line-1,l.length-1),i,"+transpose"))}n.push(new Xo(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return _n(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r<t.length;r++)e.indentLine(t[r].from().line,null,!0);an(e)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}},fl=new ao,hl=null,ml=function(e,t,n){this.time=e,this.pos=t,this.button=n};ml.prototype.compare=function(e,t,n){return this.time+400>e&&0==N(t,this.pos)&&n==this.button};var gl,yl,vl={toString:function(){return"CodeMirror.Init"}},bl={},_l={};_i.defaults=bl,_i.optionHandlers=_l;var wl=[];_i.defineInitHook=function(e){return wl.push(e)};var xl=null,Cl=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new ao,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Cl.prototype.init=function(e){function t(e){if(!me(i,e)){if(i.somethingSelected())xi({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=Oi(i);xi({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation(function(){i.setSelections(t.ranges,0,fo),i.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var n=xl.text.join("\n");if(e.clipboardData.setData("Text",n),e.clipboardData.getData("Text")==n)return void e.preventDefault()}var l=ki(),a=l.firstChild;i.display.lineSpace.insertBefore(l,i.display.lineSpace.firstChild),a.value=xl.text.join("\n");var s=document.activeElement;lo(a),setTimeout(function(){i.display.lineSpace.removeChild(l),s.focus(),s==o&&r.showPrimarySelection()},50)}}var n=this,r=this,i=r.cm,o=r.div=e.lineDiv;Ti(o,i.options.spellcheck),Eo(o,"paste",function(e){me(i,e)||Ei(e,i)||Bi<=11&&setTimeout(wn(i,function(){return n.updateFromDOM()}),20)}),Eo(o,"compositionstart",function(e){n.composing={data:e.data,done:!1}}),Eo(o,"compositionupdate",function(e){n.composing||(n.composing={data:e.data,done:!1})}),Eo(o,"compositionend",function(e){n.composing&&(e.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),Eo(o,"touchstart",function(){return r.forceCompositionEnd()}),Eo(o,"input",function(){n.composing||n.readFromDOMSoon()}),Eo(o,"copy",t),Eo(o,"cut",t)},Cl.prototype.prepareSelection=function(){var e=Ut(this.cm,!1);return e.focus=this.cm.state.focused,e},Cl.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Cl.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),i=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var o=Pi(t,e.anchorNode,e.anchorOffset),l=Pi(t,e.focusNode,e.focusOffset);if(!o||o.bad||!l||l.bad||0!=N(j(o,l),r)||0!=N(F(o,l),i)){var a=t.display.view,s=r.line>=t.display.viewFrom&&Ri(t,r)||{node:a[0].measure.map[2],offset:0},u=i.line<t.display.viewTo&&Ri(t,i);if(!u){var c=a[a.length-1].measure,d=c.maps?c.maps[c.maps.length-1]:c.map;u={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}}if(s&&u){var p,f=e.rangeCount&&e.getRangeAt(0);try{p=no(s.node,s.offset,u.offset,u.node)}catch(e){}p&&(!Li&&t.state.focused?(e.collapse(s.node,s.offset),p.collapsed||(e.removeAllRanges(),e.addRange(p))):(e.removeAllRanges(),e.addRange(p)),f&&null==e.anchorNode?e.addRange(f):Li&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Cl.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Cl.prototype.showMultipleSelections=function(e){n(this.cm.display.cursorDiv,e.cursors),n(this.cm.display.selectionDiv,e.selection)},Cl.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Cl.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return o(this.div,t)},Cl.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Cl.prototype.blur=function(){this.div.blur()},Cl.prototype.getField=function(){return this.div},Cl.prototype.supportsTouch=function(){return!0},Cl.prototype.receivedFocus=function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():_n(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},Cl.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Cl.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(Qi&&qi&&this.cm.options.gutters.length&&function(t){for(var n=e.anchorNode;n;n=n.parentNode)if(/CodeMirror-gutter-wrapper/.test(n.className))return!0;return!1}())return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=Pi(t,e.anchorNode,e.anchorOffset),r=Pi(t,e.focusNode,e.focusOffset);n&&r&&_n(t,function(){mr(t.doc,Hn(n,r),fo),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})}}},Cl.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),i=n.to();if(0==r.ch&&r.line>e.firstLine()&&(r=P(r.line-1,S(e.doc,r.line-1).length)),i.ch==S(e.doc,i.line).text.length&&i.line<e.lastLine()&&(i=P(i.line+1,0)),r.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o,l,a;r.line==t.viewFrom||0==(o=Wt(e,r.line))?(l=D(t.view[0].line),a=t.view[0].node):(l=D(t.view[o].line),a=t.view[o-1].node.nextSibling);var s,u,c=Wt(e,i.line);if(c==t.view.length-1?(s=t.viewTo-1,u=t.lineDiv.lastChild):(s=D(t.view[c+1].line)-1,u=t.view[c+1].node.previousSibling),!a)return!1;for(var d=e.doc.splitLines(function(e,t,n,r,i){function o(){u&&(s+=c,u=!1)}function l(e){e&&(o(),s+=e)}function a(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(null!=n)return void l(n||t.textContent.replace(/\u200b/g,""));var s,d=t.getAttribute("cm-marker");if(d){var p=e.findMarks(P(r,0),P(i+1,0),function(e){return function(t){return t.id==e}}(+d));return void(p.length&&(s=p[0].find(0))&&l(O(e.doc,s.from,s.to).join(c)))}if("false"==t.getAttribute("contenteditable"))return;var f=/^(pre|div|p)$/i.test(t.nodeName);f&&o();for(var h=0;h<t.childNodes.length;h++)a(t.childNodes[h]);f&&(u=!0)}else 3==t.nodeType&&l(t.nodeValue)}for(var s="",u=!1,c=e.doc.lineSeparator();a(t),t!=n;)t=t.nextSibling;return s}(e,a,u,l,s)),p=O(e.doc,P(l,0),P(s,S(e.doc,s).text.length));d.length>1&&p.length>1;)if(m(d)==m(p))d.pop(),p.pop(),s--;else{if(d[0]!=p[0])break;d.shift(),p.shift(),l++}for(var f=0,h=0,g=d[0],y=p[0],v=Math.min(g.length,y.length);f<v&&g.charCodeAt(f)==y.charCodeAt(f);)++f;for(var b=m(d),_=m(p),w=Math.min(b.length-(1==d.length?f:0),_.length-(1==p.length?f:0));h<w&&b.charCodeAt(b.length-h-1)==_.charCodeAt(_.length-h-1);)++h;if(1==d.length&&1==p.length&&l==r.line)for(;f&&f>r.ch&&b.charCodeAt(b.length-h-1)==_.charCodeAt(_.length-h-1);)f--,h++;d[d.length-1]=b.slice(0,b.length-h).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var x=P(l,f),C=P(s,p.length?m(p).length-h:0);return d.length>1||d[0]||N(x,C)?(Ir(e.doc,d,x,C,"+input"),!0):void 0},Cl.prototype.ensurePolled=function(){this.forceCompositionEnd()},Cl.prototype.reset=function(){this.forceCompositionEnd()},Cl.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Cl.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Cl.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||_n(this.cm,function(){return En(e.cm)})},Cl.prototype.setUneditable=function(e){e.contentEditable="false"},Cl.prototype.onKeyPress=function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||wn(this.cm,Ci)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Cl.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Cl.prototype.onContextMenu=function(){},Cl.prototype.resetPosition=function(){},Cl.prototype.needsContentAttribute=!0;var El=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new ao,this.hasSelection=!1,this.composing=null};El.prototype.init=function(e){function t(e){if(!me(i,e)){if(i.somethingSelected())xi({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=Oi(i);xi({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,fo):(r.prevInput="",l.value=t.text.join("\n"),lo(l))}"cut"==e.type&&(i.state.cutIncoming=!0)}}var n=this,r=this,i=this.cm,o=this.wrapper=ki(),l=this.textarea=o.firstChild;e.wrapper.insertBefore(o,e.wrapper.firstChild),Zi&&(l.style.width="0px"),Eo(l,"input",function(){zi&&Bi>=9&&n.hasSelection&&(n.hasSelection=null),r.poll()}),Eo(l,"paste",function(e){me(i,e)||Ei(e,i)||(i.state.pasteIncoming=!0,r.fastPoll())}),Eo(l,"cut",t),Eo(l,"copy",t),Eo(e.scroller,"paste",function(t){at(e,t)||me(i,t)||(i.state.pasteIncoming=!0,r.focus())}),Eo(e.lineSpace,"selectstart",function(t){at(e,t)||be(t)}),Eo(l,"compositionstart",function(){var e=i.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),Eo(l,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},El.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Ut(e);if(e.options.moveInputWithCursor){var i=Dt(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return r},El.prototype.showSelection=function(e){var t=this.cm.display;n(t.cursorDiv,e.cursors),n(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},El.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&lo(this.textarea),zi&&Bi>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",zi&&Bi>=9&&(this.hasSelection=null))}},El.prototype.getField=function(){return this.textarea},El.prototype.supportsTouch=function(){return!1},El.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Yi||l()!=this.textarea))try{this.textarea.focus()}catch(e){}},El.prototype.blur=function(){this.textarea.blur()},El.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},El.prototype.receivedFocus=function(){this.slowPoll()},El.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},El.prototype.fastPoll=function(){function e(){n.poll()||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))}var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,e)},El.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||To(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(zi&&Bi>=9&&this.hasSelection===i||Xi&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||r||(r="\u200b"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,a=Math.min(r.length,i.length);l<a&&r.charCodeAt(l)==i.charCodeAt(l);)++l;return _n(t,function(){Ci(t,i.slice(l),r.length-l,null,e.composing?"*compose":null),i.length>1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},El.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},El.prototype.onKeyPress=function(){zi&&Bi>=9&&(this.hasSelection=null),this.fastPoll()},El.prototype.onContextMenu=function(e){function t(){if(null!=l.selectionStart){var e=i.somethingSelected(),t="\u200b"+(e?l.value:"");l.value="\u21da",l.value=t,r.prevInput=e?"":"\u200b",l.selectionStart=1,l.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=c,l.style.cssText=u,zi&&Bi<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=s),null!=l.selectionStart){(!zi||zi&&Bi<9)&&t();var e=0,n=function(){o.selForContextMenu==i.doc.sel&&0==l.selectionStart&&l.selectionEnd>0&&"\u200b"==r.prevInput?wn(i,Cr)(i):e++<10?o.detectingSelectAll=setTimeout(n,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(n,200)}}var r=this,i=r.cm,o=i.display,l=r.textarea,a=Ht(i,e),s=o.scroller.scrollTop;if(a&&!Ui){i.options.resetSelectionOnContextMenu&&-1==i.doc.sel.contains(a)&&wn(i,mr)(i.doc,Hn(a),fo);var u=l.style.cssText,c=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var d=r.wrapper.getBoundingClientRect();l.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-d.top-5)+"px; left: "+(e.clientX-d.left-5)+"px;\n      z-index: 1000; background: "+(zi?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var p;if(Hi&&(p=window.scrollY),o.input.focus(),Hi&&window.scrollTo(null,p),o.input.reset(),i.somethingSelected()||(l.value=r.prevInput=" "),r.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),zi&&Bi>=9&&t(),io){xe(e);var f=function(){fe(window,"mouseup",f),setTimeout(n,20)};Eo(window,"mouseup",f)}else setTimeout(n,50)}},El.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},El.prototype.setUneditable=function(){},El.prototype.needsContentAttribute=!1,function(e){function t(t,r,i,o){e.defaults[t]=r,i&&(n[t]=o?function(e,t,n){n!=vl&&i(e,t,n)}:i)}var n=e.optionHandlers;e.defineOption=t,e.Init=vl,t("value","",function(e,t){return e.setValue(t)},!0),t("mode",null,function(e,t){e.doc.modeOption=t,Kn(e)},!0),t("indentUnit",2,Kn,!0),t("indentWithTabs",!1),t("smartIndent",!0),t("tabSize",4,function(e){$n(e),xt(e),En(e)},!0),t("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(P(r,o))}r++});for(var i=n.length-1;i>=0;i--)Ir(e.doc,t,n[i],P(n[i].line,n[i].ch+t.length))}}),t("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=vl&&e.refresh()}),t("specialCharPlaceholder",Ue,function(e){return e.refresh()},!0),t("electricChars",!0),t("inputStyle",Yi?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),t("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t("rtlMoveVisually",!eo),t("wholeLineUpdateBefore",!0),t("theme","default",function(e){gi(e),yi(e)},!0),t("keyMap","default",function(e,t,n){var r=Yr(t),i=n!=vl&&Yr(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)}),t("extraKeys",null),t("configureMouse",null),t("lineWrapping",!1,bi,!0),t("gutters",[],function(e){Fn(e.options),yi(e)},!0),t("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?Vt(e.display)+"px":"0",e.refresh()},!0),t("coverGutterNextToScrollbar",!1,function(e){return mn(e)},!0),t("scrollbarStyle","native",function(e){yn(e),mn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t("lineNumbers",!1,function(e){Fn(e.options),yi(e)},!0),t("firstLineNumber",1,yi,!0),t("lineNumberFormatter",function(e){return e},yi,!0),t("showCursorWhenSelecting",!1,qt,!0),t("resetSelectionOnContextMenu",!0),t("lineWiseCopyCut",!0),t("pasteLinesPerSelection",!0),t("readOnly",!1,function(e,t){"nocursor"==t&&(Xt(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),t("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),t("dragDrop",!0,vi),t("allowDropFileTypes",null),t("cursorBlinkRate",530),t("cursorScrollMargin",0),t("cursorHeight",1,qt,!0),t("singleCursorHeightPerLine",!0,qt,!0),t("workTime",100),t("workDelay",100),t("flattenSpans",!0,$n,!0),t("addModeClass",!1,$n,!0),t("pollInterval",100),t("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),t("historyEventDelay",1250),t("viewportMargin",10,function(e){return e.refresh()},!0),t("maxHighlightLength",1e4,$n,!0),t("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),t("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),t("autofocus",null),t("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(_i),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&wn(this,t[e])(this,n,i),he(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Yr(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:xn(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error("Overlays may not be stateful.");!function(e,t,n){for(var r=0,i=n(t);r<e.length&&n(e[r])<=i;)r++;e.splice(r,0,t)}(this.state.overlays,{mode:r,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},function(e){return e.priority}),this.state.modeGen++,En(this)}),removeOverlay:xn(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void En(this)}}),indentLine:xn(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),R(this.doc,e)&&wi(this,e,t,n)}),indentSelection:xn(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(wi(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&an(this));else{var o=i.from(),l=i.to(),a=Math.max(n,o.line);n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var s=a;s<n;++s)wi(this,s,e);var u=this.doc.sel.ranges;0==o.ch&&t.length==u.length&&u[r].from().ch>0&&pr(this.doc,r,new Xo(o,u[r].to()),fo)}}}),getTokenAt:function(e,t){return Ve(this,e,t)},getLineTokens:function(e,t){return Ve(this,P(e),t,!0)},getTokenTypeAt:function(e){e=z(this.doc,e);var t,n=Ne(this,S(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var l=r+i>>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]<o)){t=n[2*l+2];break}r=l+1}}var a=t?t.indexOf("overlay "):-1;return a<0?t:0==a?null:t.slice(0,a-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!n.hasOwnProperty(t))return r;var i=n[t],o=this.getModeAt(e);if("string"==typeof o[t])i[o[t]]&&r.push(i[o[t]]);else if(o[t])for(var l=0;l<o[t].length;l++){var a=i[o[t][l]];a&&r.push(a)}else o.helperType&&i[o.helperType]?r.push(i[o.helperType]):i[o.name]&&r.push(i[o.name]);for(var s=0;s<i._global.length;s++){var u=i._global[s];u.pred(o,this)&&-1==p(r,u.val)&&r.push(u.val)}return r},getStateAfter:function(e,t){var n=this.doc;return e=V(n,null==e?n.first+n.size-1:e),Ae(this,e+1,t).state},cursorCoords:function(e,t){var n,r=this.doc.sel.primary();return n=null==e?r.head:"object"==typeof e?z(this.doc,e):e?r.from():r.to(),Dt(this,n,t||"page")},charCoords:function(e,t){return kt(this,z(this.doc,e),t||"page")},coordsChar:function(e,t){return e=Tt(this,e,t||"page"),Mt(this,e.left,e.top)},lineAtHeight:function(e,t){return e=Tt(this,{top:e,left:0},t||"page").top,I(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),r=S(this.doc,e)}else r=e;return Ot(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-ae(r):0)},defaultTextHeight:function(){return Lt(this.display)},defaultCharWidth:function(){return Ft(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o=this.display,l=(e=Dt(this,z(this.doc,e))).bottom,a=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==r)l=e.top;else if("above"==r||"near"==r){var s=Math.max(o.wrapper.clientHeight,this.doc.height),u=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>s)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=s&&(l=e.bottom),a+t.offsetWidth>u&&(a=u-t.offsetWidth)}t.style.top=l+"px",t.style.left=t.style.right="","right"==i?(a=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?a=0:"middle"==i&&(a=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=a+"px"),n&&function(e,n){var r=on(e,{left:a,top:l,right:a+t.offsetWidth,bottom:l+t.offsetHeight});null!=r.scrollTop&&dn(e,r.scrollTop),null!=r.scrollLeft&&fn(e,r.scrollLeft)}(this)},triggerOnKeyDown:xn(si),triggerOnKeyPress:xn(ci),triggerOnKeyUp:ui,triggerOnMouseDown:xn(di),execCommand:function(e){if(pl.hasOwnProperty(e))return pl[e].call(null,this)},triggerElectric:xn(function(e){Si(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=z(this.doc,e),l=0;l<t&&!(o=Di(this.doc,o,i,n,r)).hitSide;++l);return o},moveH:xn(function(e,t){var n=this;this.extendSelectionsBy(function(r){return n.display.shift||n.doc.extend||r.empty()?Di(n.doc,r.head,e,t,n.options.rtlMoveVisually):e<0?r.from():r.to()},mo)}),deleteH:xn(function(e,t){var n=this.doc;this.doc.sel.somethingSelected()?n.replaceSelection("",null,"+delete"):Xr(this,function(r){var i=Di(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,n,r){var i=1,o=r;t<0&&(i=-1,t=-t);for(var l=z(this.doc,e),a=0;a<t;++a){var s=Dt(this,l,"div");if(null==o?o=s.left:s.left=o,(l=Ii(this,s,i,n)).hitSide)break}return l},moveV:xn(function(e,t){var n=this,r=this.doc,i=[],o=!this.display.shift&&!r.extend&&r.sel.somethingSelected();if(r.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var a=Dt(n,l.head,"div");null!=l.goalColumn&&(a.left=l.goalColumn),i.push(a.left);var s=Ii(n,a,e,t);return"page"==t&&l==r.sel.primary()&&ln(n,kt(n,s,"div").top-a.top),s},mo),i.length)for(var l=0;l<r.sel.ranges.length;l++)r.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=S(this.doc,e.line).text,n=e.ch,r=e.ch;if(t){var i=this.getHelper(e,"wordChars");"before"!=e.sticky&&r!=t.length||!n?++r:--n;for(var o=t.charAt(n),l=_(o,i)?function(e){return _(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!_(e)};n>0&&l(t.charAt(n-1));)--n;for(;r<t.length&&l(t.charAt(r));)++r}return new Xo(P(e.line,n),P(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?a(this.display.cursorDiv,"CodeMirror-overwrite"):oo(this.display.cursorDiv,"CodeMirror-overwrite"),he(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==l()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:xn(function(e,t){sn(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-dt(this)-this.display.barHeight,width:e.scrollWidth-dt(this)-this.display.barWidth,clientHeight:ft(this),clientWidth:pt(this)}},scrollIntoView:xn(function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:P(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?function(e,t){un(e),e.curOp.scrollToPos=t}(this,e):cn(this,e.from,e.to,e.margin)}),setSize:xn(function(e,t){var n=this,r=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=r(e)),null!=t&&(this.display.wrapper.style.height=r(t)),this.options.lineWrapping&&wt(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Sn(n,i,"widget");break}++i}),this.curOp.forceUpdate=!0,he(this,"refresh",this)}),operation:function(e){return _n(this,e)},startOperation:function(){return vn(this)},endOperation:function(){return bn(this)},refresh:xn(function(){var e=this.display.cachedTextHeight;En(this),this.curOp.forceUpdate=!0,xt(this),sn(this,this.doc.scrollLeft,this.doc.scrollTop),Nn(this),(null==e||Math.abs(e-Lt(this.display))>.5)&&Bt(this),he(this,"refresh",this)}),swapDoc:xn(function(e){var t=this.doc;return t.cm=null,Xn(this,e),xt(this),this.display.input.reset(),sn(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Qe(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ve(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,o){e.registerHelper(t,r,o),n[t]._global.push({pred:i,val:o})}}(_i);var Sl="iter insert remove copy getEditor constructor".split(" ");for(var Ol in il.prototype)il.prototype.hasOwnProperty(Ol)&&p(Sl,Ol)<0&&(_i.prototype[Ol]=function(e){return function(){return e.apply(this.doc,arguments)}}(il.prototype[Ol]));return ve(il),_i.inputStyles={textarea:El,contenteditable:Cl},_i.defineMode=function(e){_i.defaults.mode||"null"==e||(_i.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Io[e]=t}.apply(this,arguments)},_i.defineMIME=function(e,t){Ro[e]=t},_i.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),_i.defineMIME("text/plain","null"),_i.defineExtension=function(e,t){_i.prototype[e]=t},_i.defineDocExtension=function(e,t){il.prototype[e]=t},_i.fromTextArea=function(e,t){function n(){e.value=s.getValue()}if(t=t?c(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=l();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}var i;if(e.form&&(Eo(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var a=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(fe(e.form,"submit",n),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var s=_i(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=fe,e.on=Eo,e.wheelEventPixels=Vn,e.Doc=il,e.splitLines=Oo,e.countColumn=d,e.findColumn=f,e.isWordChar=b,e.Pass=po,e.signal=he,e.Line=Fo,e.changeEnd=Wn,e.scrollbarModel=Go,e.Pos=P,e.cmpPos=N,e.modes=Io,e.mimeModes=Ro,e.resolveMode=Te,e.getMode=ke,e.modeExtensions=Mo,e.extendMode=De,e.copyState=Ie,e.startState=Me,e.innerMode=Re,e.commands=pl,e.keyMap=dl,e.keyName=Qr,e.isModifierKey=$r,e.lookupKey=Kr,e.normalizeKeyMap=Gr,e.StringStream=Po,e.SharedTextMarker=nl,e.TextMarker=tl,e.LineWidget=Jo,e.e_preventDefault=be,e.e_stopPropagation=_e,e.e_stop=xe,e.addClass=a,e.contains=o,e.rmClass=oo,e.keyNames=al}(_i),_i.version="5.32.0",_i}()},ozyc:function(e,t,n){"use strict";t.a=function(e,t){return void 0===t&&(t=0),Object(r.b)(e,t)(this)};var r=n("YRqN")},"p/bR":function(e,t,n){var r=n("pa70"),i=n("ULWX"),o=n("KpI+"),l=n("+pQw"),a=n("rppw"),s=n("fC8q"),u={},c={};(t=e.exports=function(e,t,n,d,p){var f,h,m,g,y=p?function(){return e}:s(e),v=r(n,d,t?2:1),b=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(o(y)){for(f=a(e.length);f>b;b++)if((g=t?v(l(h=e[b])[0],h[1]):v(e[b]))===u||g===c)return g}else for(m=y.call(e);!(h=m.next()).done;)if((g=i(m,v,h.value,t))===u||g===c)return g}).BREAK=u,t.RETURN=c},pBmS:function(e,t,n){var r=n("lfBE");e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},pQo2:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata,o=n("6Xbx").__param;Object.defineProperty(t,"__esModule",{value:!0});var l=n("LMZF"),a=n("Un6q"),s=n("0nO6"),u=n("/zAi"),c=n("Rs3a"),d=n("/zAi"),p=n("4cOY"),f=n("P0cP"),h=function(){function e(){this.onClick=new l.EventEmitter}return e.prototype.handleClick=function(e){this.onClick.emit(e)},e}();r([l.Input(),i("design:type",Boolean)],h.prototype,"checked",void 0),r([l.Output(),i("design:type",l.EventEmitter)],h.prototype,"onClick",void 0),h=r([l.Component({selector:"p-dtRadioButton",template:'\n        <div class="ui-radiobutton ui-widget">\n            <div class="ui-helper-hidden-accessible">\n                <input type="radio" [checked]="checked">\n            </div>\n            <div class="ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default" (click)="handleClick($event)"\n                        (mouseenter)="hover=true" (mouseleave)="hover=false"\n                        [ngClass]="{\'ui-state-hover\':hover,\'ui-state-active\':checked}">\n                <span class="ui-radiobutton-icon ui-clickable" [ngClass]="{\'fa fa-circle\':checked}"></span>\n            </div>\n        </div>\n    '})],h),t.DTRadioButton=h;var m=function(){function e(){this.onChange=new l.EventEmitter}return e.prototype.handleClick=function(e){this.disabled||this.onChange.emit({originalEvent:e,checked:!this.checked})},e}();r([l.Input(),i("design:type",Boolean)],m.prototype,"checked",void 0),r([l.Input(),i("design:type",Boolean)],m.prototype,"disabled",void 0),r([l.Output(),i("design:type",l.EventEmitter)],m.prototype,"onChange",void 0),m=r([l.Component({selector:"p-dtCheckbox",template:'\n        <div class="ui-chkbox ui-widget">\n            <div class="ui-helper-hidden-accessible">\n                <input type="checkbox" [checked]="checked">\n            </div>\n            <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default" (click)="handleClick($event)"\n                        (mouseover)="hover=true" (mouseout)="hover=false"\n                        [ngClass]="{\'ui-state-hover\':hover&&!disabled,\'ui-state-active\':checked&&!disabled,\'ui-state-disabled\':disabled}">\n                <span class="ui-chkbox-icon ui-clickable" [ngClass]="{\'fa fa-check\':checked}"></span>\n            </div>\n        </div>\n    '})],m),t.DTCheckbox=m;var g=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([l.Input(),i("design:type",l.TemplateRef)],g.prototype,"template",void 0),r([l.Input(),i("design:type",Object)],g.prototype,"rowData",void 0),r([l.Input(),i("design:type",Object)],g.prototype,"rowIndex",void 0),g=r([l.Component({selector:"p-rowExpansionLoader",template:""})],g),t.RowExpansionLoader=g;var y=function(e){this.dt=e};r([l.Input("pColumnHeaders"),i("design:type",Array)],y.prototype,"columns",void 0),y=r([l.Component({selector:"[pColumnHeaders]",template:'\n        <ng-template ngFor let-col [ngForOf]="columns" let-lastCol="last">\n            <th #headerCell [attr.id]="col.colId" [ngStyle]="col.headerStyle||col.style" [class]="col.headerStyleClass||col.styleClass" (click)="dt.sort($event,col)" [attr.colspan]="col.colspan" [attr.rowspan]="col.rowspan"\n                [ngClass]="{\'ui-state-default ui-unselectable-text\':true, \'ui-sortable-column\': col.sortable, \'ui-state-active\': dt.isSorted(col), \'ui-resizable-column\': dt.resizableColumns, \'ui-selection-column\':col.selectionMode,\n                            \'ui-helper-hidden\': col.hidden}"\n                (dragstart)="dt.onColumnDragStart($event)" (dragleave)="dt.onColumnDragleave($event)" (drop)="dt.onColumnDrop($event)" (mousedown)="dt.onHeaderMousedown($event,headerCell)"\n                [attr.tabindex]="col.sortable ? tabindex : null" (keydown)="dt.onHeaderKeydown($event,col)"\n                [attr.scope]="col.scope||(col.colspan ? \'colgroup\' : \'col\')">\n                <span class="ui-column-resizer ui-clickable" *ngIf="dt.resizableColumns && ((dt.columnResizeMode == \'fit\' && !lastCol) || dt.columnResizeMode == \'expand\')" (mousedown)="dt.initColumnResize($event)"></span>\n                <span class="ui-column-title" *ngIf="!col.selectionMode&&!col.headerTemplate">{{col.header}}</span>\n                <span class="ui-column-title" *ngIf="col.headerTemplate">\n                    <p-columnHeaderTemplateLoader [column]="col"></p-columnHeaderTemplateLoader>\n                </span>\n                <span class="ui-sortable-column-icon fa fa-fw fa-sort" *ngIf="col.sortable"\n                     [ngClass]="{\'fa-sort-desc\': (dt.getSortOrder(col) == -1),\'fa-sort-asc\': (dt.getSortOrder(col) == 1)}"></span>\n                <input [attr.type]="col.filterType" class="ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all" [attr.maxlength]="col.filterMaxlength" [attr.placeholder]="col.filterPlaceholder" *ngIf="col.filter&&!col.filterTemplate" [value]="dt.filters[col.filterField||col.field] ? dt.filters[col.filterField||col.field].value : \'\'"\n                    (click)="dt.onFilterInputClick($event)" (input)="dt.onFilterKeyup($event.target.value, col.filterField||col.field, col.filterMatchMode)"/>\n                <p-columnFilterTemplateLoader [column]="col" *ngIf="col.filter&&col.filterTemplate"></p-columnFilterTemplateLoader>\n                <p-dtCheckbox *ngIf="col.selectionMode==\'multiple\' && dt.showHeaderCheckbox === true" (onChange)="dt.toggleRowsWithCheckbox($event)" [checked]="dt.allSelected" [disabled]="dt.isEmpty()"></p-dtCheckbox>\n            </th>\n        </ng-template>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],y),t.ColumnHeaders=y;var v=function(e){this.dt=e};r([l.Input("pColumnFooters"),i("design:type",Array)],v.prototype,"columns",void 0),v=r([l.Component({selector:"[pColumnFooters]",template:'\n        <td *ngFor="let col of columns" [ngStyle]="col.footerStyle||col.style" [class]="col.footerStyleClass||col.styleClass"\n            [attr.colspan]="col.colspan" [attr.rowspan]="col.rowspan"\n            [ngClass]="{\'ui-state-default\':true, \'ui-helper-hidden\': col.hidden}">\n            <span class="ui-column-footer" *ngIf="!col.footerTemplate">{{col.footer}}</span>\n            <span class="ui-column-footer" *ngIf="col.footerTemplate">\n                <p-columnFooterTemplateLoader [column]="col"></p-columnFooterTemplateLoader>\n            </span>\n        </td>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],v),t.ColumnFooters=v;var b=function(){function e(e){this.dt=e}return e.prototype.visibleColumns=function(){return this.columns?this.columns.filter(function(e){return!e.hidden}):[]},e}();r([l.Input("pTableBody"),i("design:type",Array)],b.prototype,"columns",void 0),r([l.Input(),i("design:type",Array)],b.prototype,"data",void 0),b=r([l.Component({selector:"[pTableBody]",template:'\n        <ng-template ngFor let-rowData [ngForOf]="data" let-even="even" let-odd="odd" let-rowIndex="index" [ngForTrackBy]="dt.rowTrackBy">\n            <tr #rowGroupElement class="ui-widget-header ui-rowgroup-header"\n                *ngIf="dt.rowGroupMode==\'subheader\' && (rowIndex === 0||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex - 1], dt.groupField)))"\n                (click)="dt.onRowGroupClick($event)" [ngStyle]="{\'cursor\': dt.sortableRowGroup ? \'pointer\' : \'auto\'}">\n                <td [attr.colspan]="dt.visibleColumns().length">\n                    <a href="#" *ngIf="dt.expandableRowGroups" (click)="dt.toggleRowGroup($event,rowData)">\n                        <span class="fa fa-fw" [ngClass]="dt.isRowGroupExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon"></span>\n                    </a>\n                    <span class="ui-rowgroup-header-name">\n                        <p-templateLoader [template]="dt.rowGroupHeaderTemplate" [data]="rowData"></p-templateLoader>\n                    </span>\n                </td>\n            </tr>\n            <tr #rowElement *ngIf="!dt.expandableRowGroups||dt.isRowGroupExpanded(rowData)"\n                    (click)="dt.handleRowClick($event, rowData, rowIndex)" (dblclick)="dt.rowDblclick($event,rowData)" (contextmenu)="dt.onRowRightClick($event,rowData)" (touchend)="dt.handleRowTouchEnd($event)"\n                    [ngClass]="[even&&dt.rowGroupMode!=\'rowspan\'? \'ui-datatable-even\':\'\',\n                                odd&&dt.rowGroupMode!=\'rowspan\'?\'ui-datatable-odd\':\'\',\n                                dt.isSelected(rowData)? \'ui-state-highlight\': \'\',\n                                dt.isRowExpanded(rowData) ? \'ui-expanded-row\': \'\',\n                                dt.getRowStyleClass(rowData,rowIndex)]">\n                <ng-template ngFor let-col [ngForOf]="columns" let-colIndex="index">\n                    <td #cell *ngIf="!dt.rowGroupMode || (dt.rowGroupMode == \'subheader\') ||\n                        (dt.rowGroupMode==\'rowspan\' && ((dt.sortField==col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) || (dt.sortField!=col.field)))"\n                        [ngStyle]="col.bodyStyle||col.style" [class]="col.bodyStyleClass||col.styleClass" (click)="dt.switchCellToEditMode(cell,col,rowData)"\n                        [ngClass]="{\'ui-editable-column\':col.editable,\'ui-selection-column\':col.selectionMode, \'ui-helper-hidden\': col.hidden}"\n                        [attr.rowspan]="(dt.rowGroupMode==\'rowspan\' && dt.sortField == col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) ? dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].size : null">\n                        <span class="ui-column-title" *ngIf="dt.responsive">{{col.header}}</span>\n                        <span class="ui-cell-data" *ngIf="!col.bodyTemplate && !col.expander && !col.selectionMode">{{dt.resolveFieldData(rowData,col.field)}}</span>\n                        <span class="ui-cell-data" *ngIf="col.bodyTemplate">\n                            <p-columnBodyTemplateLoader [column]="col" [rowData]="rowData" [rowIndex]="rowIndex + dt.first"></p-columnBodyTemplateLoader>\n                        </span>\n                        <div class="ui-cell-editor" *ngIf="col.editable">\n                            <input *ngIf="!col.editorTemplate" type="text" [(ngModel)]="rowData[col.field]"\n                                (keydown)="dt.onCellEditorKeydown($event, col, rowData, rowIndex)" (blur)="dt.onCellEditorBlur($event, col, rowData, rowIndex)"\n                                (input)="dt.onCellEditorInput($event, col, rowData, rowIndex)" (change)="dt.onCellEditorChange($event, col, rowData, rowIndex)"\n                                class="ui-inputtext ui-widget ui-state-default ui-corner-all"/>\n                            <a *ngIf="col.editorTemplate" class="ui-cell-editor-proxy-focus" href="#" (focus)="dt.onCustomEditorFocusPrev($event, colIndex)"></a>\n                            <p-columnEditorTemplateLoader *ngIf="col.editorTemplate" [column]="col" [rowData]="rowData" [rowIndex]="rowIndex"></p-columnEditorTemplateLoader>\n                            <a *ngIf="col.editorTemplate" class="ui-cell-editor-proxy-focus" href="#" (focus)="dt.onCustomEditorFocusNext($event, colIndex)"></a>\n                        </div>\n                        <a href="#" *ngIf="col.expander" (click)="dt.toggleRow(rowData,$event)">\n                            <span class="ui-row-toggler fa fa-fw ui-clickable" [ngClass]="dt.isRowExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon"></span>\n                        </a>\n                        <p-dtRadioButton *ngIf="col.selectionMode==\'single\'" (onClick)="dt.selectRowWithRadio($event, rowData)" [checked]="dt.isSelected(rowData)"></p-dtRadioButton>\n                        <p-dtCheckbox *ngIf="col.selectionMode==\'multiple\'" (onChange)="dt.toggleRowWithCheckbox($event,rowData)" [checked]="dt.isSelected(rowData)"></p-dtCheckbox>\n                    </td>\n                </ng-template>\n            </tr>\n            <tr *ngIf="dt.expandableRows && dt.isRowExpanded(rowData)" class="ui-expanded-row-content">\n                <td [attr.colspan]="dt.visibleColumns().length">\n                    <p-rowExpansionLoader [rowData]="rowData" [rowIndex]="rowIndex" [template]="dt.rowExpansionTemplate"></p-rowExpansionLoader>\n                </td>\n            </tr>\n            <tr class="ui-widget-header ui-rowgroup-footer" *ngIf="dt.rowGroupFooterTemplate && dt.rowGroupMode==\'subheader\' && ((rowIndex === dt.dataToRender.length - 1)||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex + 1],dt.groupField))) && (!dt.expandableRowGroups || dt.isRowGroupExpanded(rowData))">\n                <p-templateLoader class="ui-helper-hidden" [data]="rowData" [template]="dt.rowGroupFooterTemplate"></p-templateLoader>\n            </tr>\n        </ng-template>\n\n        <tr *ngIf="dt.isEmpty()" class="ui-widget-content ui-datatable-emptymessage-row" [style.visibility]="dt.loading ? \'hidden\' : \'visible\'">\n            <td [attr.colspan]="dt.visibleColumns().length" class="ui-datatable-emptymessage">\n                <span *ngIf="!dt.emptyMessageTemplate">{{dt.emptyMessage}}</span>\n                <p-templateLoader [template]="dt.emptyMessageTemplate"></p-templateLoader>\n            </td>\n        </tr>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],b),t.TableBody=b;var _=function(){function e(e,t,n,r,i){this.dt=e,this.domHandler=t,this.el=n,this.renderer=r,this.zone=i,this.onVirtualScroll=new l.EventEmitter}return e.prototype.ngAfterViewInit=function(){this.initScrolling()},e.prototype.ngAfterViewChecked=function(){var e=this;if(this.virtualScroll&&!this.rowHeight){var t=this.domHandler.findSingle(this.scrollTable,"tr.ui-widget-content:not(.ui-datatable-emptymessage-row)");t&&(this.rowHeight=this.domHandler.getOuterHeight(t))}this.frozen||this.zone.runOutsideAngular(function(){setTimeout(function(){e.alignScrollBar()},1)})},e.prototype.initScrolling=function(){var e=this;this.scrollHeader=this.scrollHeaderViewChild.nativeElement,this.scrollHeaderBox=this.scrollHeaderBoxViewChild.nativeElement,this.scrollBody=this.scrollBodyViewChild.nativeElement,this.scrollTable=this.scrollTableViewChild.nativeElement,this.scrollTableWrapper=this.scrollTableWrapperViewChild.nativeElement,this.scrollFooter=this.scrollFooterViewChild?this.scrollFooterViewChild.nativeElement:null,this.scrollFooterBox=this.scrollFooterBoxViewChild?this.scrollFooterBoxViewChild.nativeElement:null,this.setScrollHeight(),this.frozen||this.zone.runOutsideAngular(function(){e.scrollHeader.addEventListener("scroll",e.onHeaderScroll.bind(e)),e.scrollBody.addEventListener("scroll",e.onBodyScroll.bind(e))}),this.frozen?this.scrollBody.style.paddingBottom=this.domHandler.calculateScrollbarWidth()+"px":this.alignScrollBar()},e.prototype.onBodyScroll=function(e){var t=this,n=this.el.nativeElement.previousElementSibling;if(n)var r=this.domHandler.findSingle(n,".ui-datatable-scrollable-body");if(this.scrollHeaderBox.style.marginLeft=-1*this.scrollBody.scrollLeft+"px",this.scrollFooterBox&&(this.scrollFooterBox.style.marginLeft=-1*this.scrollBody.scrollLeft+"px"),r&&(r.scrollTop=this.scrollBody.scrollTop),this.virtualScroll){var i=this.domHandler.getOuterHeight(this.scrollBody),o=this.domHandler.getOuterHeight(this.scrollTable),l=this.rowHeight*this.dt.rows,a=this.domHandler.getOuterHeight(this.scrollTableWrapper)/l||1;if(this.scrollBody.scrollTop+i>parseFloat(this.scrollTable.style.top)+o||this.scrollBody.scrollTop<parseFloat(this.scrollTable.style.top)){var s=Math.floor(this.scrollBody.scrollTop*a/this.scrollBody.scrollHeight)+1;this.onVirtualScroll.emit({page:s,callback:function(){t.scrollTable.style.top=(s-1)*l+"px"}})}}},e.prototype.setScrollHeight=function(){if(this.dt.scrollHeight)if(-1!==this.dt.scrollHeight.indexOf("%")){this.scrollBody.style.visibility="hidden",this.scrollBody.style.height="100px";var e=this.domHandler.getOuterHeight(this.dt.el.nativeElement.children[0]),t=this.domHandler.getOuterHeight(this.dt.el.nativeElement.parentElement)*parseInt(this.dt.scrollHeight)/100-(e-100);this.scrollBody.style.height="auto",this.scrollBody.style.maxHeight=t+"px",this.scrollBody.style.visibility="visible"}else this.scrollBody.style.maxHeight=this.dt.scrollHeight},e.prototype.onHeaderScroll=function(e){this.scrollHeader.scrollLeft=0},e.prototype.hasVerticalOverflow=function(){return this.domHandler.getOuterHeight(this.scrollTable)>this.domHandler.getOuterHeight(this.scrollBody)},e.prototype.alignScrollBar=function(){var e=this.hasVerticalOverflow()?this.domHandler.calculateScrollbarWidth():0;this.scrollHeaderBox.style.marginRight=e+"px",this.scrollFooterBox&&(this.scrollFooterBox.style.marginRight=e+"px")},e.prototype.ngOnDestroy=function(){this.scrollHeader.removeEventListener("scroll",this.onHeaderScroll),this.scrollBody.removeEventListener("scroll",this.onBodyScroll)},e}();r([l.Input("pScrollableView"),i("design:type",Array)],_.prototype,"columns",void 0),r([l.Input(),i("design:type",d.HeaderColumnGroup)],_.prototype,"headerColumnGroup",void 0),r([l.Input(),i("design:type",d.HeaderColumnGroup)],_.prototype,"footerColumnGroup",void 0),r([l.ViewChild("scrollHeader"),i("design:type",l.ElementRef)],_.prototype,"scrollHeaderViewChild",void 0),r([l.ViewChild("scrollHeaderBox"),i("design:type",l.ElementRef)],_.prototype,"scrollHeaderBoxViewChild",void 0),r([l.ViewChild("scrollBody"),i("design:type",l.ElementRef)],_.prototype,"scrollBodyViewChild",void 0),r([l.ViewChild("scrollTable"),i("design:type",l.ElementRef)],_.prototype,"scrollTableViewChild",void 0),r([l.ViewChild("scrollTableWrapper"),i("design:type",l.ElementRef)],_.prototype,"scrollTableWrapperViewChild",void 0),r([l.ViewChild("scrollFooter"),i("design:type",l.ElementRef)],_.prototype,"scrollFooterViewChild",void 0),r([l.ViewChild("scrollFooterBox"),i("design:type",l.ElementRef)],_.prototype,"scrollFooterBoxViewChild",void 0),r([l.Input(),i("design:type",Boolean)],_.prototype,"frozen",void 0),r([l.Input(),i("design:type",String)],_.prototype,"width",void 0),r([l.Input(),i("design:type",Boolean)],_.prototype,"virtualScroll",void 0),r([l.Output(),i("design:type",l.EventEmitter)],_.prototype,"onVirtualScroll",void 0),_=r([l.Component({selector:"[pScrollableView]",template:'\n        <div #scrollHeader class="ui-widget-header ui-datatable-scrollable-header" [ngStyle]="{\'width\': width}">\n            <div #scrollHeaderBox  class="ui-datatable-scrollable-header-box">\n                <table [ngClass]="dt.tableStyleClass" [ngStyle]="dt.tableStyle">\n                    <thead class="ui-datatable-thead">\n                        <tr *ngIf="!headerColumnGroup" class="ui-state-default" [pColumnHeaders]="columns"></tr>\n                        <ng-template [ngIf]="headerColumnGroup">\n                            <tr *ngFor="let headerRow of headerColumnGroup.rows" class="ui-state-default" [pColumnHeaders]="headerRow.columns"></tr>\n                        </ng-template>\n                    </thead>\n                    <tbody *ngIf="dt.frozenValue" [ngClass]="{\'ui-datatable-data ui-widget-content\': true, \'ui-datatable-hoverable-rows\': (dt.rowHover||dt.selectionMode)}" [pTableBody]="columns" [data]="dt.frozenValue"></tbody>\n                </table>\n            </div>\n        </div>\n        <div #scrollBody class="ui-datatable-scrollable-body" [ngStyle]="{\'width\': width}">\n            <div #scrollTableWrapper class="ui-datatable-scrollable-table-wrapper" style="position:relative">\n                <table #scrollTable [class]="dt.tableStyleClass" [ngStyle]="dt.tableStyle" [ngClass]="{\'ui-datatable-virtual-table\':virtualScroll}" style="top:0px">\n                    <colgroup class="ui-datatable-scrollable-colgroup">\n                        <col *ngFor="let col of columns" [ngStyle]="col.headerStyle||col.style" [ngClass]="{\'ui-helper-hidden\': col.hidden}"/>\n                    </colgroup>\n                    <tbody [ngClass]="{\'ui-datatable-data ui-widget-content\': true, \'ui-datatable-hoverable-rows\': (dt.rowHover||dt.selectionMode)}" [pTableBody]="columns" [data]="dt.dataToRender"></tbody>\n                </table>\n            </div>\n        </div>\n        <div #scrollFooter class="ui-widget-header ui-datatable-scrollable-footer" [ngStyle]="{\'width\': width}" *ngIf="dt.hasFooter()">\n            <div #scrollFooterBox  class="ui-datatable-scrollable-footer-box">\n                <table [ngClass]="dt.tableStyleClass" [ngStyle]="dt.tableStyle">\n                    <tfoot class="ui-datatable-tfoot">\n                        <tr *ngIf="!footerColumnGroup" [pColumnFooters]="columns" class="ui-state-default"></tr>\n                        <ng-template [ngIf]="footerColumnGroup">\n                            <tr *ngFor="let footerRow of footerColumnGroup.rows" class="ui-state-default" [pColumnFooters]="footerRow.columns"></tr>\n                        </ng-template>\n                    </tfoot>\n                </table>\n            </div>\n        </div>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],_),t.ScrollableView=_;var w=function(){function e(e,t,n,r,i,o,a){this.el=e,this.domHandler=t,this.differs=n,this.renderer=r,this.changeDetector=i,this.objectUtils=o,this.zone=a,this.pageLinks=5,this.selectionChange=new l.EventEmitter,this.showHeaderCheckbox=!0,this.onRowClick=new l.EventEmitter,this.onRowSelect=new l.EventEmitter,this.onRowUnselect=new l.EventEmitter,this.onRowDblclick=new l.EventEmitter,this.onHeaderCheckboxToggle=new l.EventEmitter,this.onContextMenuSelect=new l.EventEmitter,this.filterDelay=300,this.onLazyLoad=new l.EventEmitter,this.columnResizeMode="fit",this.onColResize=new l.EventEmitter,this.onColReorder=new l.EventEmitter,this.sortMode="single",this.defaultSortOrder=1,this.csvSeparator=",",this.exportFilename="download",this.emptyMessage="No records found",this.paginatorPosition="bottom",this.alwaysShowPaginator=!0,this.metaKeySelection=!0,this.rowTrackBy=function(e,t){return t},this.immutable=!0,this.compareSelectionBy="deepEquals",this.onEditInit=new l.EventEmitter,this.onEditComplete=new l.EventEmitter,this.onEdit=new l.EventEmitter,this.onEditCancel=new l.EventEmitter,this.onPage=new l.EventEmitter,this.onSort=new l.EventEmitter,this.onFilter=new l.EventEmitter,this.rowExpandMode="multiple",this.expandedIcon="fa-chevron-circle-down",this.collapsedIcon="fa-chevron-circle-right",this.tabindex=1,this.sortableRowGroup=!0,this.filters={},this.loadingIcon="fa-circle-o-notch",this.virtualScrollDelay=500,this.rowGroupExpandMode="multiple",this.valueChange=new l.EventEmitter,this.firstChange=new l.EventEmitter,this.onRowExpand=new l.EventEmitter,this.onRowCollapse=new l.EventEmitter,this.onRowGroupExpand=new l.EventEmitter,this.onRowGroupCollapse=new l.EventEmitter,this.page=0,this.columnsChanged=!1,this._first=0,this._sortOrder=1,this.filterConstraints={startsWith:function(e,t){if(void 0===t||null===t||""===t.trim())return!0;if(void 0===e||null===e)return!1;var n=t.toLowerCase();return e.toString().toLowerCase().slice(0,n.length)===n},contains:function(e,t){return void 0===t||null===t||"string"==typeof t&&""===t.trim()||void 0!==e&&null!==e&&-1!==e.toString().toLowerCase().indexOf(t.toLowerCase())},endsWith:function(e,t){if(void 0===t||null===t||""===t.trim())return!0;if(void 0===e||null===e)return!1;var n=t.toString().toLowerCase();return-1!==e.toString().toLowerCase().indexOf(n,e.toString().length-n.length)},equals:function(e,t){return void 0===t||null===t||"string"==typeof t&&""===t.trim()||void 0!==e&&null!==e&&e.toString().toLowerCase()==t.toString().toLowerCase()},notEquals:function(e,t){return!(void 0===t||null===t||"string"==typeof t&&""===t.trim()||void 0!==e&&null!==e&&e.toString().toLowerCase()==t.toString().toLowerCase())},in:function(e,t){if(void 0===t||null===t||0===t.length)return!0;if(void 0===e||null===e)return!1;for(var n=0;n<t.length;n++)if(t[n]===e)return!0;return!1}},this.differ=n.find([]).create(null)}return e.prototype.ngOnInit=function(){this.lazy&&this.onLazyLoad.emit(this.createLazyLoadMetadata())},e.prototype.ngAfterContentInit=function(){var e=this;this.initColumns(),this.initColumnGroups(),this.columnsSubscription=this.cols.changes.subscribe(function(t){e.initColumns(),e.changeDetector.markForCheck()}),this.templates.forEach(function(t){switch(t.getType()){case"rowexpansion":e.rowExpansionTemplate=t.template;break;case"rowgroupheader":e.rowGroupHeaderTemplate=t.template;break;case"rowgroupfooter":e.rowGroupFooterTemplate=t.template;break;case"emptymessage":e.emptyMessageTemplate=t.template}})},e.prototype.ngAfterViewChecked=function(){if(this.columnsChanged&&this.el.nativeElement.offsetParent&&(this.resizableColumns&&this.initResizableColumns(),this.reorderableColumns&&this.initColumnReordering(),this.columnsChanged=!1),this.totalRecordsChanged&&this.virtualScroll&&this.virtualScrollableTableWrapper&&this.virtualScrollableTableWrapper.offsetParent){var e=this.domHandler.findSingle(this.virtualScrollableTableWrapper,"tr.ui-widget-content"),t=this.domHandler.getOuterHeight(e);this.virtualTableHeight=this._totalRecords*t,this.virtualScrollableTableWrapper.style.height=this.virtualTableHeight+"px",this.totalRecordsChanged=!1}},e.prototype.ngAfterViewInit=function(){var e=this;this.globalFilter&&(this.globalFilterFunction=this.renderer.listen(this.globalFilter,"keyup",function(){e.filterTimeout&&clearTimeout(e.filterTimeout),e.filterTimeout=setTimeout(function(){e._filter(),e.filterTimeout=null},e.filterDelay)})),this.virtualScrollableTableWrapper=this.domHandler.findSingle(this.el.nativeElement,"div.ui-datatable-scrollable-table-wrapper"),this.initialized=!0},Object.defineProperty(e.prototype,"multiSortMeta",{get:function(){return this._multiSortMeta},set:function(e){this._multiSortMeta=e,"multiple"===this.sortMode&&this.sortMultiple()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"sortField",{get:function(){return this._sortField},set:function(e){this._sortField=e,"single"===this.sortMode&&this.sortSingle()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"sortOrder",{get:function(){return this._sortOrder},set:function(e){this._sortOrder=e,"single"===this.sortMode&&this.sortSingle()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){this.immutable?(this._value=e?e.slice():null,this.handleDataChange()):this._value=e,this.valueChange.emit(this.value)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._first},set:function(e){var t=this.initialized&&this._first!==e;this._first=e,t&&this.paginate()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"totalRecords",{get:function(){return this._totalRecords},set:function(e){this._totalRecords=e,this.totalRecordsChanged=!0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selection",{get:function(){return this._selection},set:function(e){if(this._selection=e,this.dataKey&&!this.preventSelectionKeysPropagation&&(this.selectionKeys={},this._selection))if(Array.isArray(this._selection))for(var t=0,n=this._selection;t<n.length;t++){var r=n[t];this.selectionKeys[String(this.objectUtils.resolveFieldData(r,this.dataKey))]=1}else this.selectionKeys[String(this.objectUtils.resolveFieldData(this._selection,this.dataKey))]=1;this.preventSelectionKeysPropagation=!1},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){this.immutable||this.differ.diff(this.value)&&this.handleDataChange()},e.prototype.handleDataChange=function(){var e=this;this.paginator&&this.updatePaginator(),this.virtualScroll&&this.virtualScrollCallback&&this.virtualScrollCallback(),this.lazy||(this.hasFilter()&&this._filter(),this.preventSortPropagation?this.preventSortPropagation=!1:(this.sortField||this.multiSortMeta)&&(!this.sortColumn&&this.columns&&(this.sortColumn=this.columns.find(function(t){return t.field===e.sortField&&"custom"===t.sortable})),"single"==this.sortMode?this.sortSingle():"multiple"==this.sortMode&&this.sortMultiple())),this.updateDataToRender(this.filteredValue||this.value)},e.prototype.initColumns=function(){this.columns=this.cols.toArray(),this.initScrollableColumns(),this.columnsChanged=!0},e.prototype.initScrollableColumns=function(){this.scrollableColumns=[],this.frozenColumns=[];for(var e=0,t=this.columns;e<t.length;e++){var n=t[e];n.frozen?this.frozenColumns.push(n):this.scrollableColumns.push(n)}},e.prototype.initColumnGroups=function(){for(var e=this.headerColumnGroups.toArray(),t=this.footerColumnGroups.toArray(),n=0,r=e;n<r.length;n++)(l=r[n]).frozen?this.frozenHeaderColumnGroup=l:this.scrollableHeaderColumnGroup=l;for(var i=0,o=t;i<o.length;i++){var l;(l=o[i]).frozen?this.frozenFooterColumnGroup=l:this.scrollableFooterColumnGroup=l}},e.prototype.resolveFieldData=function(e,t){return this.objectUtils.resolveFieldData(e,t)},e.prototype.updateRowGroupMetadata=function(){if(this.rowGroupMetadata={},this.dataToRender)for(var e=0;e<this.dataToRender.length;e++){var t=this.resolveFieldData(this.dataToRender[e],this.sortField);0==e?this.rowGroupMetadata[t]={index:0,size:1}:t===this.resolveFieldData(this.dataToRender[e-1],this.sortField)?this.rowGroupMetadata[t].size++:this.rowGroupMetadata[t]={index:e,size:1}}},e.prototype.updatePaginator=function(){if(this.updateTotalRecords(),this.totalRecords&&this.first>=this.totalRecords){var e=Math.ceil(this.totalRecords/this.rows);this._first=Math.max((e-1)*this.rows,0)}},e.prototype.updateTotalRecords=function(){this.totalRecords=this.lazy?this.totalRecords:this.value?this.value.length:0},e.prototype.onPageChange=function(e){this._first=e.first,this.firstChange.emit(this.first),this.rows=e.rows,this.paginate()},e.prototype.paginate=function(){this.lazy?this.onLazyLoad.emit(this.createLazyLoadMetadata()):this.updateDataToRender(this.filteredValue||this.value),this.onPage.emit({first:this.first,rows:this.rows})},e.prototype.updateDataToRender=function(e){if((this.paginator||this.virtualScroll)&&e){this.dataToRender=[];for(var t=this.lazy?0:this.first,n=this.virtualScroll?this.first+2*this.rows:t+this.rows,r=t;r<n&&!(r>=e.length);r++)this.dataToRender.push(e[r])}else this.dataToRender=e;this.rowGroupMode&&this.updateRowGroupMetadata()},e.prototype.onVirtualScroll=function(e){var t=this;this._first=(e.page-1)*this.rows,this.virtualScrollCallback=e.callback,this.zone.run(function(){t.virtualScrollTimer&&clearTimeout(t.virtualScrollTimer),t.virtualScrollTimer=setTimeout(function(){t.lazy?t.onLazyLoad.emit(t.createLazyLoadMetadata()):t.updateDataToRender(t.filteredValue||t.value)},t.virtualScrollDelay)})},e.prototype.onHeaderKeydown=function(e,t){13==e.keyCode&&(this.sort(e,t),e.preventDefault())},e.prototype.onHeaderMousedown=function(e,t){this.reorderableColumns&&("INPUT"!==e.target.nodeName?t.draggable=!0:"INPUT"===e.target.nodeName&&(t.draggable=!1))},e.prototype.sort=function(e,t){if(t.sortable){var n=e.target.nodeName;if("TH"==n&&this.domHandler.hasClass(e.target,"ui-sortable-column")||("SPAN"==n||"DIV"==n)&&!this.domHandler.hasClass(e.target,"ui-clickable")){this.immutable||(this.preventSortPropagation=!0);var r=t.sortField||t.field;this._sortOrder=this.sortField===r?-1*this.sortOrder:this.defaultSortOrder,this._sortField=r,this.sortColumn=t,"multiple"==this.sortMode&&(this.multiSortMeta&&(e.metaKey||e.ctrlKey)||(this._multiSortMeta=[]),this.addSortMeta({field:this.sortField,order:this.sortOrder})),this.lazy?(this._first=0,this.onLazyLoad.emit(this.createLazyLoadMetadata())):"multiple"==this.sortMode?this.sortMultiple():this.sortSingle(),this.onSort.emit({field:this.sortField,order:this.sortOrder,multisortmeta:this.multiSortMeta})}this.updateDataToRender(this.filteredValue||this.value)}},e.prototype.sortSingle=function(){var e=this;this.value&&(this.sortColumn&&"custom"===this.sortColumn.sortable?(this.preventSortPropagation=!0,this.sortColumn.sortFunction.emit({field:this.sortField,order:this.sortOrder})):this.value.sort(function(t,n){var r=e.resolveFieldData(t,e.sortField),i=e.resolveFieldData(n,e.sortField),o=null;return o=null==r&&null!=i?-1:null!=r&&null==i?1:null==r&&null==i?0:"string"==typeof r&&"string"==typeof i?r.localeCompare(i):r<i?-1:r>i?1:0,e.sortOrder*o}),this._first=0,this.hasFilter()&&this._filter())},e.prototype.sortMultiple=function(){var e=this;this.value&&(this.value.sort(function(t,n){return e.multisortField(t,n,e.multiSortMeta,0)}),this.hasFilter()&&this._filter())},e.prototype.multisortField=function(e,t,n,r){var i=this.resolveFieldData(e,n[r].field),o=this.resolveFieldData(t,n[r].field),l=null;if("string"==typeof i||i instanceof String){if(i.localeCompare&&i!=o)return n[r].order*i.localeCompare(o)}else l=i<o?-1:1;return i==o?n.length-1>r?this.multisortField(e,t,n,r+1):0:n[r].order*l},e.prototype.addSortMeta=function(e){for(var t=-1,n=0;n<this.multiSortMeta.length;n++)if(this.multiSortMeta[n].field===e.field){t=n;break}t>=0?this.multiSortMeta[t]=e:this.multiSortMeta.push(e)},e.prototype.isSorted=function(e){if(!e.sortable)return!1;var t=e.sortField||e.field;if("single"===this.sortMode)return this.sortField&&t===this.sortField;if("multiple"===this.sortMode){var n=!1;if(this.multiSortMeta)for(var r=0;r<this.multiSortMeta.length;r++)if(this.multiSortMeta[r].field==t){n=!0;break}return n}},e.prototype.getSortOrder=function(e){var t=0,n=e.sortField||e.field;if("single"===this.sortMode)this.sortField&&n===this.sortField&&(t=this.sortOrder);else if("multiple"===this.sortMode&&this.multiSortMeta)for(var r=0;r<this.multiSortMeta.length;r++)if(this.multiSortMeta[r].field==n){t=this.multiSortMeta[r].order;break}return t},e.prototype.onRowGroupClick=function(e){if(this.rowGroupToggleClick)this.rowGroupToggleClick=!1;else if(this.sortableRowGroup){var t=e.target.nodeName;("TD"==t||"SPAN"==t&&!this.domHandler.hasClass(e.target,"ui-clickable"))&&(this.sortField!=this.groupField?(this._sortField=this.groupField,this.sortSingle()):(this._sortOrder=-1*this.sortOrder,this.sortSingle()))}},e.prototype.clearSelectionRange=function(){var e,t;this.rangeRowIndex>this.anchorRowIndex?(e=this.anchorRowIndex,t=this.rangeRowIndex):this.rangeRowIndex<this.anchorRowIndex?(e=this.rangeRowIndex,t=this.anchorRowIndex):(e=this.rangeRowIndex,t=this.rangeRowIndex);for(var n=function(e){var t=r.dataToRender[e],n=r.findIndexInSelection(t);r._selection=r.selection.filter(function(e,t){return t!=n});var i=r.dataKey?String(r.resolveFieldData(t,r.dataKey)):null;i&&delete r.selectionKeys[i],r.onRowUnselect.emit({originalEvent:event,data:t,type:"row"})},r=this,i=e;i<=t;i++)n(i)},e.prototype.selectRange=function(e){var t,n;this.anchorRowIndex>e?(t=e,n=this.anchorRowIndex):this.anchorRowIndex<e?(t=this.anchorRowIndex,n=e):(t=e,n=e);for(var r=t;r<=n;r++){var i=this.dataToRender[r];this._selection=this.selection.concat([i]),this.selectionChange.emit(this.selection);var o=this.dataKey?String(this.resolveFieldData(i,this.dataKey)):null;o&&(this.selectionKeys[o]=1),this.onRowSelect.emit({originalEvent:event,data:i,type:"row"})}},e.prototype.handleRowClick=function(e,t,n){if(this.preventRowClickPropagation)this.preventRowClickPropagation=!1;else{var r=e.target.nodeName;if("INPUT"!=r&&"BUTTON"!=r&&"A"!=r&&!this.domHandler.hasClass(e.target,"ui-clickable")){if(this.onRowClick.next({originalEvent:e,data:t}),this.selectionMode){if(this.isMultipleSelectionMode()&&e.shiftKey&&null!=this.anchorRowIndex)this.domHandler.clearSelection(),null!=this.rangeRowIndex&&this.clearSelectionRange(),this.rangeRowIndex=n,this.selectRange(n);else{var i=this.isSelected(t),o=!this.rowTouched&&this.metaKeySelection,l=this.dataKey?String(this.resolveFieldData(t,this.dataKey)):null;if(this.anchorRowIndex=n,this.rangeRowIndex=n,o){var a=e.metaKey||e.ctrlKey;if(i&&a){if(this.isSingleSelectionMode())this._selection=null,this.selectionKeys={},this.selectionChange.emit(null);else{var s=this.findIndexInSelection(t);this._selection=this.selection.filter(function(e,t){return t!=s}),this.selectionChange.emit(this.selection),l&&delete this.selectionKeys[l]}this.onRowUnselect.emit({originalEvent:e,data:t,type:"row"})}else this.isSingleSelectionMode()?(this._selection=t,this.selectionChange.emit(t),l&&(this.selectionKeys={},this.selectionKeys[l]=1)):this.isMultipleSelectionMode()&&(a?this._selection=this.selection||[]:(this._selection=[],this.selectionKeys={}),this._selection=this.selection.concat([t]),this.selectionChange.emit(this.selection),l&&(this.selectionKeys[l]=1)),this.onRowSelect.emit({originalEvent:e,data:t,type:"row"})}else if(this.isSingleSelectionMode())i?(this._selection=null,this.selectionKeys={},this.onRowUnselect.emit({originalEvent:e,data:t,type:"row"})):(this._selection=t,this.onRowSelect.emit({originalEvent:e,data:t,type:"row"}),l&&(this.selectionKeys={},this.selectionKeys[l]=1));else if(i){var u=this.findIndexInSelection(t);this._selection=this.selection.filter(function(e,t){return t!=u}),this.selectionChange.emit(this.selection),this.onRowUnselect.emit({originalEvent:e,data:t,type:"row"}),l&&delete this.selectionKeys[l]}else this._selection=(this.selection||[]).concat([t]),this.selectionChange.emit(this.selection),this.onRowSelect.emit({originalEvent:e,data:t,type:"row"}),l&&(this.selectionKeys[l]=1)}this.preventSelectionKeysPropagation=!0}this.rowTouched=!1}}},e.prototype.handleRowTouchEnd=function(e){this.rowTouched=!0},e.prototype.selectRowWithRadio=function(e,t){this.selection!=t?(this._selection=t,this.selectionChange.emit(this.selection),this.onRowSelect.emit({originalEvent:e,data:t,type:"radiobutton"}),this.dataKey&&(this.selectionKeys={},this.selectionKeys[String(this.resolveFieldData(t,this.dataKey))]=1)):(this._selection=null,this.selectionChange.emit(this.selection),this.onRowUnselect.emit({originalEvent:e,data:t,type:"radiobutton"})),this.preventSelectionKeysPropagation=!0,this.preventRowClickPropagation=!0},e.prototype.toggleRowWithCheckbox=function(e,t){var n=this.findIndexInSelection(t);this.selection=this.selection||[];var r=this.dataKey?String(this.resolveFieldData(t,this.dataKey)):null;-1!=n?(this._selection=this.selection.filter(function(e,t){return t!=n}),this.selectionChange.emit(this.selection),this.onRowUnselect.emit({originalEvent:e,data:t,type:"checkbox"}),r&&delete this.selectionKeys[r]):(this._selection=this.selection.concat([t]),this.selectionChange.emit(this.selection),this.onRowSelect.emit({originalEvent:e,data:t,type:"checkbox"}),r&&(this.selectionKeys[r]=1)),this.preventSelectionKeysPropagation=!0,this.preventRowClickPropagation=!0},e.prototype.toggleRowsWithCheckbox=function(e){this.selection=e.checked?this.headerCheckboxToggleAllPages?this.value.slice():this.dataToRender.slice():[],this.selectionChange.emit(this.selection),this.onHeaderCheckboxToggle.emit({originalEvent:e,checked:e.checked})},e.prototype.onRowRightClick=function(e,t){if(this.contextMenu){var n=-1!=this.findIndexInSelection(t);this.dataKey&&String(this.resolveFieldData(t,this.dataKey)),n||(this.isSingleSelectionMode()?(this.selection=t,this.selectionChange.emit(t)):this.isMultipleSelectionMode()&&(this.selection=[t],this.selectionChange.emit(this.selection)),this.dataKey&&(this.selectionKeys[String(this.resolveFieldData(t,this.dataKey))]=1,this.preventSelectionKeysPropagation=!0)),this.contextMenu.show(e),this.onContextMenuSelect.emit({originalEvent:e,data:t})}},e.prototype.rowDblclick=function(e,t){this.onRowDblclick.emit({originalEvent:e,data:t})},e.prototype.isSingleSelectionMode=function(){return"single"===this.selectionMode},e.prototype.isMultipleSelectionMode=function(){return"multiple"===this.selectionMode},e.prototype.findIndexInSelection=function(e){var t=-1;if(this.selection)for(var n=0;n<this.selection.length;n++)if(this.equals(e,this.selection[n])){t=n;break}return t},e.prototype.isSelected=function(e){return!(!e||!this.selection)&&(this.dataKey?void 0!==this.selectionKeys[this.objectUtils.resolveFieldData(e,this.dataKey)]:this.selection instanceof Array?this.findIndexInSelection(e)>-1:this.equals(e,this.selection))},e.prototype.equals=function(e,t){return"equals"===this.compareSelectionBy?e===t:this.objectUtils.equals(e,t,this.dataKey)},Object.defineProperty(e.prototype,"allSelected",{get:function(){if(this.headerCheckboxToggleAllPages)return this.selection&&this.value&&this.selection.length===this.value.length;var e=!0;if(this.dataToRender&&this.selection&&this.dataToRender.length<=this.selection.length){for(var t=0,n=this.dataToRender;t<n.length;t++)if(!this.isSelected(n[t])){e=!1;break}}else e=!1;return e},enumerable:!0,configurable:!0}),e.prototype.onFilterKeyup=function(e,t,n){var r=this;this.filterTimeout&&clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout(function(){r.filter(e,t,n),r.filterTimeout=null},this.filterDelay)},e.prototype.filter=function(e,t,n){this.isFilterBlank(e)?this.filters[t]&&delete this.filters[t]:this.filters[t]={value:e,matchMode:n},this._filter()},e.prototype.isFilterBlank=function(e){return null===e||void 0===e||"string"==typeof e&&0==e.trim().length||e instanceof Array&&0==e.length},e.prototype._filter=function(){if(this._first=0,this.lazy)this.onLazyLoad.emit(this.createLazyLoadMetadata());else{if(!this.value||!this.columns)return;this.filteredValue=[];for(var e=0;e<this.value.length;e++){for(var t=!0,n=!1,r=0;r<this.columns.length;r++){var i=this.columns[r],o=this.filters[i.filterField||i.field];if(o){var l=o.value,a=o.matchMode||"startsWith",s=this.resolveFieldData(this.value[e],i.filterField||i.field);if((0,this.filterConstraints[a])(s,l)||(t=!1),!t)break}i.excludeGlobalFilter||!this.globalFilter||n||(n=this.filterConstraints.contains(this.resolveFieldData(this.value[e],i.filterField||i.field),this.globalFilter.value))}var u=t;this.globalFilter&&(u=t&&n),u&&this.filteredValue.push(this.value[e])}this.filteredValue.length===this.value.length&&(this.filteredValue=null),this.paginator&&(this.totalRecords=this.filteredValue?this.filteredValue.length:this.value?this.value.length:0),this.updateDataToRender(this.filteredValue||this.value)}this.onFilter.emit({filters:this.filters,filteredValue:this.filteredValue||this.value})},e.prototype.hasFilter=function(){var e=!0;for(var t in this.filters)if(this.filters.hasOwnProperty(t)){e=!1;break}return!e||this.globalFilter&&this.globalFilter.value&&this.globalFilter.value.trim().length},e.prototype.onFilterInputClick=function(e){e.stopPropagation()},e.prototype.switchCellToEditMode=function(e,t,n){var r=this;if(!this.selectionMode&&this.editable&&t.editable&&(this.editorClick=!0,this.bindDocumentEditListener(),e!=this.editingCell)){this.editingCell&&0==this.domHandler.find(this.editingCell,".ng-invalid.ng-dirty").length&&this.domHandler.removeClass(this.editingCell,"ui-cell-editing"),this.editingCell=e,this.onEditInit.emit({column:t,data:n}),this.domHandler.addClass(e,"ui-cell-editing");var i=this.domHandler.findSingle(e,".ui-cell-editor input");i&&setTimeout(function(){return r.domHandler.invokeElementMethod(i,"focus")},50)}},e.prototype.switchCellToViewMode=function(e){this.editingCell=null;var t=this.findCell(e);this.domHandler.removeClass(t,"ui-cell-editing"),this.unbindDocumentEditListener()},e.prototype.closeCell=function(){this.editingCell&&(this.domHandler.removeClass(this.editingCell,"ui-cell-editing"),this.editingCell=null,this.unbindDocumentEditListener())},e.prototype.bindDocumentEditListener=function(){var e=this;this.documentEditListener||(this.documentEditListener=this.renderer.listen("document","click",function(t){e.editorClick||e.closeCell(),e.editorClick=!1}))},e.prototype.unbindDocumentEditListener=function(){this.documentEditListener&&(this.documentEditListener(),this.documentEditListener=null)},e.prototype.onCellEditorKeydown=function(e,t,n,r){this.editable&&(13==e.keyCode?0==this.domHandler.find(this.editingCell,".ng-invalid.ng-dirty").length&&(this.switchCellToViewMode(e.target),e.preventDefault()):27==e.keyCode?(this.switchCellToViewMode(e.target),e.preventDefault()):9==e.keyCode&&(e.shiftKey?this.moveToPreviousCell(e):this.moveToNextCell(e)))},e.prototype.onCellEditorInput=function(e,t,n,r){this.editable&&this.onEdit.emit({originalEvent:e,column:t,data:n,index:r})},e.prototype.onCellEditorChange=function(e,t,n,r){this.editable&&(this.editChanged=!0,this.onEditComplete.emit({column:t,data:n,index:r}))},e.prototype.onCellEditorBlur=function(e,t,n,r){this.editable&&(this.editChanged?this.editChanged=!1:this.onEditCancel.emit({column:t,data:n,index:r}))},e.prototype.moveToPreviousCell=function(e){var t=this.findCell(e.target),n=this.findPreviousEditableColumn(t);n&&(this.domHandler.invokeElementMethod(n,"click"),e.preventDefault())},e.prototype.moveToNextCell=function(e){var t=this.findCell(e.target),n=this.findNextEditableColumn(t);n&&(this.domHandler.invokeElementMethod(n,"click"),e.preventDefault())},e.prototype.findPreviousEditableColumn=function(e){var t=e.previousElementSibling;if(!t){var n=e.parentElement.previousElementSibling;n&&(t=n.lastElementChild)}return t?this.domHandler.hasClass(t,"ui-editable-column")?t:this.findPreviousEditableColumn(t):null},e.prototype.findNextEditableColumn=function(e){var t=e.nextElementSibling;if(!t){var n=e.parentElement.nextElementSibling;n&&(t=n.firstElementChild)}return t?this.domHandler.hasClass(t,"ui-editable-column")?t:this.findNextEditableColumn(t):null},e.prototype.onCustomEditorFocusPrev=function(e){this.moveToPreviousCell(e)},e.prototype.onCustomEditorFocusNext=function(e){this.moveToNextCell(e)},e.prototype.findCell=function(e){if(e){for(var t=e;t&&"TD"!=t.tagName;)t=t.parentElement;return t}return null},e.prototype.initResizableColumns=function(){this.tbody=this.domHandler.findSingle(this.el.nativeElement,"tbody.ui-datatable-data"),this.resizerHelper=this.domHandler.findSingle(this.el.nativeElement,"div.ui-column-resizer-helper"),this.fixColumnWidths()},e.prototype.onDocumentMouseMove=function(e){this.columnResizing&&this.onColumnResize(e)},e.prototype.onDocumentMouseUp=function(e){this.columnResizing&&(this.columnResizing=!1,this.onColumnResizeEnd(e))},e.prototype.bindColumnResizeEvents=function(){var e=this;this.zone.runOutsideAngular(function(){window.document.addEventListener("mousemove",e.onDocumentMouseMove.bind(e))}),this.documentColumnResizeEndListener=this.renderer.listen("document","mouseup",function(t){e.columnResizing&&(e.columnResizing=!1,e.onColumnResizeEnd(t))})},e.prototype.unbindColumnResizeEvents=function(){window.document.removeEventListener("mousemove",this.onDocumentMouseMove),this.documentColumnResizeEndListener&&(this.documentColumnResizeEndListener(),this.documentColumnResizeEndListener=null)},e.prototype.initColumnResize=function(e){this.bindColumnResizeEvents();var t=this.el.nativeElement.children[0],n=this.domHandler.getOffset(t).left;this.resizeColumn=e.target.parentElement,this.columnResizing=!0,this.lastResizerHelperX=e.pageX-n+t.scrollLeft},e.prototype.onColumnResize=function(e){var t=this.el.nativeElement.children[0],n=this.domHandler.getOffset(t).left;this.domHandler.addClass(t,"ui-unselectable-text"),this.resizerHelper.style.height=t.offsetHeight+"px",this.resizerHelper.style.top="0px",this.resizerHelper.style.left=e.pageX-n+t.scrollLeft+"px",this.resizerHelper.style.display="block"},e.prototype.onColumnResizeEnd=function(e){var t=this.resizerHelper.offsetLeft-this.lastResizerHelperX,n=this.resizeColumn.offsetWidth,r=n+t,i=this.resizeColumn.style.minWidth||15;if(n+t>parseInt(i)){if("fit"===this.columnResizeMode){var o=this.resizeColumn.nextElementSibling,l=o.offsetWidth-t;if(r>15&&l>15&&(this.resizeColumn.style.width=r+"px",o&&(o.style.width=l+"px"),this.scrollable)){var a=this.domHandler.findSingle(this.el.nativeElement,"colgroup.ui-datatable-scrollable-colgroup"),s=this.domHandler.index(this.resizeColumn);a.children[s].style.width=r+"px",o&&(a.children[s+1].style.width=l+"px")}}else if("expand"===this.columnResizeMode){this.tbody.parentElement.style.width=this.tbody.parentElement.offsetWidth+t+"px",this.resizeColumn.style.width=r+"px";var u=this.tbody.parentElement.style.width;this.scrollable?(this.domHandler.findSingle(this.el.nativeElement,".ui-datatable-scrollable-header-box").children[0].style.width=u,a=this.domHandler.findSingle(this.el.nativeElement,"colgroup.ui-datatable-scrollable-colgroup"),s=this.domHandler.index(this.resizeColumn),a.children[s].style.width=r+"px"):this.el.nativeElement.children[0].style.width=u}this.onColResize.emit({element:this.resizeColumn,delta:t})}this.resizerHelper.style.display="none",this.resizeColumn=null,this.domHandler.removeClass(this.el.nativeElement.children[0],"ui-unselectable-text"),this.unbindColumnResizeEvents()},e.prototype.fixColumnWidths=function(){for(var e,t=this.domHandler.find(this.el.nativeElement,"th.ui-resizable-column"),n=0;n<t.length;n++)t[n].style.width=t[n].offsetWidth+"px";if(this.scrollable&&(e=this.domHandler.findSingle(this.el.nativeElement,"colgroup.ui-datatable-scrollable-colgroup").children))for(n=0;n<t.length;n++)e[n].style.width=t[n].offsetWidth+"px"},e.prototype.onColumnDragStart=function(e){var t=this;this.columnResizing?e.preventDefault():(this.draggedColumn=this.findParentHeader(e.target),e.dataTransfer.setData("text","b"),this.zone.runOutsideAngular(function(){window.document.addEventListener("dragover",t.onColumnDragover.bind(t))}))},e.prototype.onColumnDragover=function(e){var t=this.findParentHeader(e.target);if(this.reorderableColumns&&this.draggedColumn&&t){e.preventDefault();var n=this.domHandler.getOffset(this.el.nativeElement.children[0]),r=this.domHandler.getOffset(t);if(this.draggedColumn!=t){var i=r.left-n.left,o=r.left+t.offsetWidth/2;this.reorderIndicatorUp.style.top=r.top-n.top-(this.iconHeight-1)+"px",this.reorderIndicatorDown.style.top=r.top-n.top+t.offsetHeight+"px",e.pageX>o?(this.reorderIndicatorUp.style.left=i+t.offsetWidth-Math.ceil(this.iconWidth/2)+"px",this.reorderIndicatorDown.style.left=i+t.offsetWidth-Math.ceil(this.iconWidth/2)+"px",this.dropPosition=1):(this.reorderIndicatorUp.style.left=i-Math.ceil(this.iconWidth/2)+"px",this.reorderIndicatorDown.style.left=i-Math.ceil(this.iconWidth/2)+"px",this.dropPosition=-1),this.reorderIndicatorUp.style.display="block",this.reorderIndicatorDown.style.display="block"}else e.dataTransfer.dropEffect="none"}},e.prototype.onColumnDragleave=function(e){this.reorderableColumns&&this.draggedColumn&&(e.preventDefault(),this.reorderIndicatorUp.style.display="none",this.reorderIndicatorDown.style.display="none",window.document.removeEventListener("dragover",this.onColumnDragover))},e.prototype.onColumnDrop=function(e){if(e.preventDefault(),this.draggedColumn){var t=this.domHandler.index(this.draggedColumn),n=this.domHandler.index(this.findParentHeader(e.target)),r=t!=n;r&&(n-t==1&&-1===this.dropPosition||t-n==1&&1===this.dropPosition)&&(r=!1),r&&(this.objectUtils.reorderArray(this.columns,t,n),this.scrollable&&this.initScrollableColumns(),this.onColReorder.emit({dragIndex:t,dropIndex:n,columns:this.columns})),this.reorderIndicatorUp.style.display="none",this.reorderIndicatorDown.style.display="none",this.draggedColumn.draggable=!1,this.draggedColumn=null,this.dropPosition=null}},e.prototype.initColumnReordering=function(){this.reorderIndicatorUp=this.domHandler.findSingle(this.el.nativeElement.children[0],"span.ui-datatable-reorder-indicator-up"),this.reorderIndicatorDown=this.domHandler.findSingle(this.el.nativeElement.children[0],"span.ui-datatable-reorder-indicator-down"),this.iconWidth=this.domHandler.getHiddenElementOuterWidth(this.reorderIndicatorUp),this.iconHeight=this.domHandler.getHiddenElementOuterHeight(this.reorderIndicatorUp)},e.prototype.findParentHeader=function(e){if("TH"==e.nodeName)return e;for(var t=e.parentElement;"TH"!=t.nodeName&&(t=t.parentElement););return t},e.prototype.hasFooter=function(){if(this.footerColumnGroups.first)return!0;if(this.columns)for(var e=0;e<this.columns.length;e++)if(this.columns[e].footer||this.columns[e].footerTemplate)return!0;return!1},e.prototype.isEmpty=function(){return!this.dataToRender||0==this.dataToRender.length},e.prototype.createLazyLoadMetadata=function(){return{first:this.first,rows:this.virtualScroll?2*this.rows:this.rows,sortField:this.sortField,sortOrder:this.sortOrder,filters:this.filters,globalFilter:this.globalFilter?this.globalFilter.value:null,multiSortMeta:this.multiSortMeta}},e.prototype.toggleRow=function(e,t){this.expandedRows||(this.expandedRows=[]);var n=this.findExpandedRowIndex(e);-1!=n?(this.expandedRows.splice(n,1),this.onRowCollapse.emit({originalEvent:t,data:e})):("single"===this.rowExpandMode&&(this.expandedRows=[]),this.expandedRows.push(e),this.onRowExpand.emit({originalEvent:t,data:e})),t&&t.preventDefault()},e.prototype.findExpandedRowIndex=function(e){var t=-1;if(this.expandedRows)for(var n=0;n<this.expandedRows.length;n++)if(this.expandedRows[n]==e){t=n;break}return t},e.prototype.isRowExpanded=function(e){return-1!=this.findExpandedRowIndex(e)},e.prototype.findExpandedRowGroupIndex=function(e){var t=-1;if(this.expandedRowsGroups&&this.expandedRowsGroups.length)for(var n=0;n<this.expandedRowsGroups.length;n++){var r=this.expandedRowsGroups[n];if(this.resolveFieldData(e,this.groupField)===r){t=n;break}}return t},e.prototype.isRowGroupExpanded=function(e){return-1!=this.findExpandedRowGroupIndex(e)},e.prototype.toggleRowGroup=function(e,t){this.expandedRowsGroups||(this.expandedRowsGroups=[]),this.rowGroupToggleClick=!0;var n=this.findExpandedRowGroupIndex(t),r=this.resolveFieldData(t,this.groupField);n>=0?(this.expandedRowsGroups.splice(n,1),this.onRowGroupCollapse.emit({originalEvent:e,group:r})):("single"===this.rowGroupExpandMode&&(this.expandedRowsGroups=[]),this.expandedRowsGroups.push(r),this.onRowGroupExpand.emit({originalEvent:e,group:r})),e.preventDefault()},e.prototype.reset=function(){this._sortField=null,this._sortOrder=1,this.filteredValue=null,this.filters={},this._first=0,this.firstChange.emit(this._first),this.updateTotalRecords(),this.lazy?this.onLazyLoad.emit(this.createLazyLoadMetadata()):this.updateDataToRender(this.value)},e.prototype.exportCSV=function(e){var t=this,n=this.filteredValue||this.value,r="\ufeff";e&&e.selectionOnly&&(n=this.selection||[]);for(var i=0;i<this.columns.length;i++){var o=this.columns[i];o.exportable&&o.field&&(r+='"'+(o.header||o.field)+'"',i<this.columns.length-1&&(r+=this.csvSeparator))}n.forEach(function(e,n){r+="\n";for(var i=0;i<t.columns.length;i++){var o=t.columns[i];o.exportable&&o.field&&(r+='"'+t.resolveFieldData(e,o.field)+'"',i<t.columns.length-1&&(r+=t.csvSeparator))}});var l=new Blob([r],{type:"text/csv;charset=utf-8;"});if(window.navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(l,this.exportFilename+".csv");else{var a=document.createElement("a");a.style.display="none",document.body.appendChild(a),void 0!==a.download?(a.setAttribute("href",URL.createObjectURL(l)),a.setAttribute("download",this.exportFilename+".csv"),a.click()):(r="data:text/csv;charset=utf-8,"+r,window.open(encodeURI(r))),document.body.removeChild(a)}},e.prototype.getBlockableElement=function(){return this.el.nativeElement.children[0]},e.prototype.getRowStyleClass=function(e,t){var n="ui-widget-content";if(this.rowStyleClass)(r=this.rowStyleClass.call(this,e,t))&&(n+=" "+r);else if(this.rowStyleMap&&this.dataKey){var r;(r=this.rowStyleMap[e[this.dataKey]])&&(n+=" "+r)}return n},e.prototype.visibleColumns=function(){return this.columns?this.columns.filter(function(e){return!e.hidden}):[]},Object.defineProperty(e.prototype,"containerWidth",{get:function(){return this.scrollable?this.scrollWidth?this.scrollWidth:this.frozenWidth&&this.unfrozenWidth?parseFloat(this.frozenWidth)+parseFloat(this.unfrozenWidth)+"px":void 0:this.style?this.style.width:null},enumerable:!0,configurable:!0}),e.prototype.hasFrozenColumns=function(){return this.frozenColumns&&this.frozenColumns.length>0},e.prototype.ngOnDestroy=function(){this.globalFilterFunction&&this.globalFilterFunction(),this.resizableColumns&&this.unbindColumnResizeEvents(),this.unbindDocumentEditListener(),this.columnsSubscription&&this.columnsSubscription.unsubscribe(),this.virtualScrollCallback&&(this.virtualScrollCallback=null)},e}();r([l.Input(),i("design:type",Boolean)],w.prototype,"paginator",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"rows",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"pageLinks",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"rowsPerPageOptions",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"responsive",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"stacked",void 0),r([l.Input(),i("design:type",String)],w.prototype,"selectionMode",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"selectionChange",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"editable",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"showHeaderCheckbox",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowClick",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowSelect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowUnselect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowDblclick",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onHeaderCheckboxToggle",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"headerCheckboxToggleAllPages",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onContextMenuSelect",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"filterDelay",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"lazy",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onLazyLoad",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"resizableColumns",void 0),r([l.Input(),i("design:type",String)],w.prototype,"columnResizeMode",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onColResize",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"reorderableColumns",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onColReorder",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"scrollable",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"virtualScroll",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"scrollHeight",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"scrollWidth",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"frozenWidth",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"unfrozenWidth",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"style",void 0),r([l.Input(),i("design:type",String)],w.prototype,"styleClass",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"tableStyle",void 0),r([l.Input(),i("design:type",String)],w.prototype,"tableStyleClass",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"globalFilter",void 0),r([l.Input(),i("design:type",String)],w.prototype,"sortMode",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"defaultSortOrder",void 0),r([l.Input(),i("design:type",String)],w.prototype,"groupField",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"contextMenu",void 0),r([l.Input(),i("design:type",String)],w.prototype,"csvSeparator",void 0),r([l.Input(),i("design:type",String)],w.prototype,"exportFilename",void 0),r([l.Input(),i("design:type",String)],w.prototype,"emptyMessage",void 0),r([l.Input(),i("design:type",String)],w.prototype,"paginatorPosition",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"alwaysShowPaginator",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"metaKeySelection",void 0),r([l.Input(),i("design:type",Function)],w.prototype,"rowTrackBy",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"immutable",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"frozenValue",void 0),r([l.Input(),i("design:type",String)],w.prototype,"compareSelectionBy",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEditInit",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEditComplete",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEdit",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEditCancel",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onPage",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onSort",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onFilter",void 0),r([l.ContentChild(d.Header),i("design:type",Object)],w.prototype,"header",void 0),r([l.ContentChild(d.Footer),i("design:type",Object)],w.prototype,"footer",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"expandableRows",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"expandedRows",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"expandableRowGroups",void 0),r([l.Input(),i("design:type",String)],w.prototype,"rowExpandMode",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"expandedRowsGroups",void 0),r([l.Input(),i("design:type",String)],w.prototype,"expandedIcon",void 0),r([l.Input(),i("design:type",String)],w.prototype,"collapsedIcon",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"tabindex",void 0),r([l.Input(),i("design:type",Function)],w.prototype,"rowStyleClass",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"rowStyleMap",void 0),r([l.Input(),i("design:type",String)],w.prototype,"rowGroupMode",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"sortableRowGroup",void 0),r([l.Input(),i("design:type",String)],w.prototype,"sortFile",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"rowHover",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"filters",void 0),r([l.Input(),i("design:type",String)],w.prototype,"dataKey",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"loading",void 0),r([l.Input(),i("design:type",String)],w.prototype,"loadingIcon",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"virtualScrollDelay",void 0),r([l.Input(),i("design:type",String)],w.prototype,"rowGroupExpandMode",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"valueChange",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"firstChange",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowExpand",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowCollapse",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowGroupExpand",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowGroupCollapse",void 0),r([l.ContentChildren(d.PrimeTemplate),i("design:type",l.QueryList)],w.prototype,"templates",void 0),r([l.ContentChildren(d.Column),i("design:type",l.QueryList)],w.prototype,"cols",void 0),r([l.ContentChildren(d.HeaderColumnGroup),i("design:type",l.QueryList)],w.prototype,"headerColumnGroups",void 0),r([l.ContentChildren(d.FooterColumnGroup),i("design:type",l.QueryList)],w.prototype,"footerColumnGroups",void 0),r([l.Input(),i("design:type",Array),i("design:paramtypes",[Array])],w.prototype,"multiSortMeta",null),r([l.Input(),i("design:type",String),i("design:paramtypes",[String])],w.prototype,"sortField",null),r([l.Input(),i("design:type",Number),i("design:paramtypes",[Number])],w.prototype,"sortOrder",null),r([l.Input(),i("design:type",Array),i("design:paramtypes",[Array])],w.prototype,"value",null),r([l.Input(),i("design:type",Number),i("design:paramtypes",[Number])],w.prototype,"first",null),r([l.Input(),i("design:type",Number),i("design:paramtypes",[Number])],w.prototype,"totalRecords",null),r([l.Input(),i("design:type",Object),i("design:paramtypes",[Object])],w.prototype,"selection",null),w=r([l.Component({selector:"p-dataTable",template:'\n        <div [ngStyle]="style" [class]="styleClass" [style.width]="containerWidth"\n            [ngClass]="{\'ui-datatable ui-widget\':true,\'ui-datatable-reflow\':responsive,\'ui-datatable-stacked\':stacked,\'ui-datatable-resizable\':resizableColumns,\'ui-datatable-scrollable\':scrollable}">\n            <div class="ui-datatable-loading ui-widget-overlay" *ngIf="loading"></div>\n            <div class="ui-datatable-loading-content" *ngIf="loading">\n                <i [class]="\'fa fa-spin fa-2x \' + loadingIcon"></i>\n            </div>\n            <div class="ui-datatable-header ui-widget-header" *ngIf="header">\n                <ng-content select="p-header"></ng-content>\n            </div>\n            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="ui-paginator-top" [alwaysShow]="alwaysShowPaginator"\n                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === \'top\' || paginatorPosition ==\'both\')"></p-paginator>\n            <div class="ui-datatable-tablewrapper" *ngIf="!scrollable">\n                <table [ngClass]="tableStyleClass" [ngStyle]="tableStyle">\n                    <thead class="ui-datatable-thead">\n                        <tr *ngIf="!headerColumnGroups.first" class="ui-state-default" [pColumnHeaders]="columns"></tr>\n                        <ng-template [ngIf]="headerColumnGroups.first">\n                            <tr *ngFor="let headerRow of headerColumnGroups.first.rows" class="ui-state-default" [pColumnHeaders]="headerRow.columns"></tr>\n                        </ng-template>\n                    </thead>\n                    <tfoot *ngIf="hasFooter()" class="ui-datatable-tfoot">\n                        <tr *ngIf="!footerColumnGroups.first" class="ui-state-default" [pColumnFooters]="columns"></tr>\n                        <ng-template [ngIf]="footerColumnGroups.first">\n                            <tr *ngFor="let footerRow of footerColumnGroups.first.rows" class="ui-state-default" [pColumnFooters]="footerRow.columns"></tr>\n                        </ng-template>\n                    </tfoot>\n                    <tbody [ngClass]="{\'ui-datatable-data ui-widget-content\': true, \'ui-datatable-hoverable-rows\': (rowHover||selectionMode)}" [pTableBody]="columns" [data]="dataToRender"></tbody>\n                </table>\n            </div>\n            \n            <ng-template [ngIf]="scrollable">\n                <div class="ui-datatable-scrollable-wrapper ui-helper-clearfix">\n                    <div *ngIf="hasFrozenColumns()" [pScrollableView]="frozenColumns" frozen="true"\n                        [headerColumnGroup]="frozenHeaderColumnGroup" [footerColumnGroup]="frozenFooterColumnGroup"\n                        [ngStyle]="{\'width\':this.frozenWidth}" class="ui-datatable-scrollable-view ui-datatable-frozen-view"></div>\n                    <div [pScrollableView]="scrollableColumns" [ngStyle]="{\'width\':this.unfrozenWidth, \'left\': this.frozenWidth}"\n                        [headerColumnGroup]="scrollableHeaderColumnGroup" [footerColumnGroup]="scrollableFooterColumnGroup"\n                        class="ui-datatable-scrollable-view" [virtualScroll]="virtualScroll" (onVirtualScroll)="onVirtualScroll($event)"\n                        [ngClass]="{\'ui-datatable-unfrozen-view\': hasFrozenColumns()}"></div>\n                </div>\n            </ng-template>\n            \n            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="ui-paginator-bottom" [alwaysShow]="alwaysShowPaginator"\n                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === \'bottom\' || paginatorPosition ==\'both\')"></p-paginator>\n            <div class="ui-datatable-footer ui-widget-header" *ngIf="footer">\n                <ng-content select="p-footer"></ng-content>\n            </div>\n            \n            <div class="ui-column-resizer-helper ui-state-highlight" style="display:none"></div>\n            <span class="fa fa-arrow-down ui-datatable-reorder-indicator-up" style="position: absolute; display: none;"></span>\n            <span class="fa fa-arrow-up ui-datatable-reorder-indicator-down" style="position: absolute; display: none;"></span>\n        </div>\n    ',providers:[p.DomHandler,f.ObjectUtils]})],w),t.DataTable=w;var x=function(){};x=r([l.NgModule({imports:[a.CommonModule,u.SharedModule,c.PaginatorModule,s.FormsModule],exports:[w,u.SharedModule],declarations:[w,h,m,y,v,b,_,g]})],x),t.DataTableModule=x},pa70:function(e,t,n){var r=n("uNkO");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},piOq:function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},ptrv:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},qLnt:function(e,t,n){"use strict";function r(e){return e.reduce(function(e,t){return e.concat(t instanceof c?t.errors:t)},[])}var i=n("1j/l"),o=n("NGRF"),l=n("B1iP"),a=n("8ofh"),s=n("NePw"),u=n("6Xbx"),c=function(e){function t(t){e.call(this),this.errors=t;var n=Error.call(this,t?t.length+" errors occurred during unsubscription:\n  "+t.map(function(e,t){return t+1+") "+e.toString()}).join("\n  "):"");this.name=n.name="UnsubscriptionError",this.stack=n.stack,this.message=n.message}return Object(u.__extends)(t,e),t}(Error);n.d(t,"a",function(){return d});var d=function(){function e(e){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,e&&(this._unsubscribe=e)}return e.prototype.unsubscribe=function(){var e,t=!1;if(!this.closed){var n=this._parent,u=this._parents,d=this._unsubscribe,p=this._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var f=-1,h=u?u.length:0;n;)n.remove(this),n=++f<h&&u[f]||null;if(Object(l.a)(d)&&Object(a.a)(d).call(this)===s.a&&(t=!0,e=e||(s.a.e instanceof c?r(s.a.e.errors):[s.a.e])),Object(i.a)(p))for(f=-1,h=p.length;++f<h;){var m=p[f];if(Object(o.a)(m)&&Object(a.a)(m.unsubscribe).call(m)===s.a){t=!0,e=e||[];var g=s.a.e;g instanceof c?e=e.concat(r(g.errors)):e.push(g)}}if(t)throw new c(e)}},e.prototype.add=function(t){if(!t||t===e.EMPTY)return e.EMPTY;if(t===this)return this;var n=t;switch(typeof t){case"function":n=new e(t);case"object":if(n.closed||"function"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if("function"!=typeof n._addParent){var r=n;(n=new e)._subscriptions=[r]}break;default:throw new Error("unrecognized teardown "+t+" added to Subscription.")}return(this._subscriptions||(this._subscriptions=[])).push(n),n._addParent(this),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.prototype._addParent=function(e){var t=this._parent,n=this._parents;t&&t!==e?n?-1===n.indexOf(e)&&n.push(e):this._parents=[e]:this._parent=e},e.EMPTY=function(e){return e.closed=!0,e}(new e),e}()},qgI0:function(e,t,n){"use strict";var r=n("xIGM"),i=n("kQVV"),o=n("mHG6"),l=n("NGRF"),a=n("AP4T"),s=n("X3fp"),u=n("6Xbx"),c=function(e){function t(t,n,r){e.call(this),this.parent=t,this.outerValue=n,this.outerIndex=r,this.index=0}return Object(u.__extends)(t,e),t.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},t.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},t}(n("E9/g").a),d=n("mz3w");t.a=function(e,t,n,u){var p=new c(e,n,u);if(p.closed)return null;if(t instanceof a.a)return t._isScalar?(p.next(t.value),p.complete(),null):(p.syncErrorThrowable=!0,t.subscribe(p));if(Object(i.a)(t)){for(var f=0,h=t.length;f<h&&!p.closed;f++)p.next(t[f]);p.closed||p.complete()}else{if(Object(o.a)(t))return t.then(function(e){p.closed||(p.next(e),p.complete())},function(e){return p.error(e)}).then(null,function(e){r.a.setTimeout(function(){throw e})}),p;if(t&&"function"==typeof t[s.a])for(var m=t[s.a]();;){var g=m.next();if(g.done){p.complete();break}if(p.next(g.value),p.closed)break}else if(t&&"function"==typeof t[d.a]){var y=t[d.a]();if("function"==typeof y.subscribe)return y.subscribe(new c(e,n,u));p.error(new TypeError("Provided object does not correctly implement Symbol.observable"))}else{var v="You provided "+(Object(l.a)(t)?"an invalid object":"'"+t+"'")+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.";p.error(new TypeError(v))}}return null}},qqDE:function(e,t,n){"use strict";t.a=function(e,t){return function(n){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new o(e,t))}};var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project,this.thisArg))},e}(),l=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.count=0,this.thisArg=r||this}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(i.a)},rIdM:function(e,t,n){"use strict";var r=n("2Fuj"),i=n("lzDK"),o=n("9e9+"),l=n("RT4T"),a=n("Wo2w"),s=Object.assign;e.exports=!s||n("umMR")(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=s({},e)[n]||Object.keys(s({},t)).join("")!=r})?function(e,t){for(var n=l(e),s=arguments.length,u=1,c=i.f,d=o.f;s>u;)for(var p,f=a(arguments[u++]),h=c?r(f).concat(c(f)):r(f),m=h.length,g=0;m>g;)d.call(f,p=h[g++])&&(n[p]=f[p]);return n}:s},rKhO:function(e,t,n){var r=n("VceJ");e.exports=Array.isArray||function(e){return"Array"==r(e)}},rMsi:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},rgUS:function(e,t,n){var r;!function(i,o,l,a){"use strict";function s(e,t,n){return setTimeout(f(e,n),t)}function u(e,t,n){return!!Array.isArray(e)&&(c(e,n[t],n),!0)}function c(e,t,n){var r;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==a)for(r=0;r<e.length;)t.call(n,e[r],r,e),r++;else for(r in e)e.hasOwnProperty(r)&&t.call(n,e[r],r,e)}function d(e,t,n){var r="DEPRECATED METHOD: "+t+"\n"+n+" AT \n";return function(){var t=new Error("get-stack-trace"),n=t&&t.stack?t.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=i.console&&(i.console.warn||i.console.log);return o&&o.call(i.console,r,n),e.apply(this,arguments)}}function p(e,t,n){var r,i=t.prototype;(r=e.prototype=Object.create(i)).constructor=e,r._super=i,n&&te(r,n)}function f(e,t){return function(){return e.apply(t,arguments)}}function h(e,t){return typeof e==ie?e.apply(t?t[0]||a:a,t):e}function m(e,t){return e===a?t:e}function g(e,t,n){c(_(t),function(t){e.addEventListener(t,n,!1)})}function y(e,t,n){c(_(t),function(t){e.removeEventListener(t,n,!1)})}function v(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function b(e,t){return e.indexOf(t)>-1}function _(e){return e.trim().split(/\s+/g)}function w(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;r<e.length;){if(n&&e[r][n]==t||!n&&e[r]===t)return r;r++}return-1}function x(e){return Array.prototype.slice.call(e,0)}function C(e,t,n){for(var r=[],i=[],o=0;o<e.length;){var l=t?e[o][t]:e[o];w(i,l)<0&&r.push(e[o]),i[o]=l,o++}return n&&(r=t?r.sort(function(e,n){return e[t]>n[t]}):r.sort()),r}function E(e,t){for(var n,r,i=t[0].toUpperCase()+t.slice(1),o=0;o<ne.length;){if(n=ne[o],(r=n?n+i:t)in e)return r;o++}return a}function S(e){var t=e.ownerDocument||e;return t.defaultView||t.parentWindow||i}function O(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){h(e.options.enable,[e])&&n.handler(t)},this.init()}function T(e,t,n){var r=n.pointers.length,i=n.changedPointers.length,o=t&me&&r-i==0,l=t&(ge|ye)&&r-i==0;n.isFirst=!!o,n.isFinal=!!l,o&&(e.session={}),n.eventType=t,function(e,t){var n=e.session,r=t.pointers,i=r.length;n.firstInput||(n.firstInput=k(t)),i>1&&!n.firstMultiple?n.firstMultiple=k(t):1===i&&(n.firstMultiple=!1);var o=n.firstInput,l=n.firstMultiple,s=l?l.center:o.center,u=t.center=D(r);t.timeStamp=ae(),t.deltaTime=t.timeStamp-o.timeStamp,t.angle=P(s,u),t.distance=M(s,u),function(e,t){var n=t.center,r=e.offsetDelta||{},i=e.prevDelta||{},o=e.prevInput||{};t.eventType!==me&&o.eventType!==ge||(i=e.prevDelta={x:o.deltaX||0,y:o.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=i.x+(n.x-r.x),t.deltaY=i.y+(n.y-r.y)}(n,t),t.offsetDirection=R(t.deltaX,t.deltaY);var c=I(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=c.x,t.overallVelocityY=c.y,t.overallVelocity=le(c.x)>le(c.y)?c.x:c.y,t.scale=l?function(e,t){return M(r[0],r[1],Te)/M(e[0],e[1],Te)}(l.pointers):1,t.rotation=l?function(e,t){return P(r[1],r[0],Te)+P(e[1],e[0],Te)}(l.pointers):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,function(e,t){var n,r,i,o,l=e.lastInterval||t,s=t.timeStamp-l.timeStamp;if(t.eventType!=ye&&(s>he||l.velocity===a)){var u=t.deltaX-l.deltaX,c=t.deltaY-l.deltaY,d=I(s,u,c);r=d.x,i=d.y,n=le(d.x)>le(d.y)?d.x:d.y,o=R(u,c),e.lastInterval=t}else n=l.velocity,r=l.velocityX,i=l.velocityY,o=l.direction;t.velocity=n,t.velocityX=r,t.velocityY=i,t.direction=o}(n,t);var d=e.element;v(t.srcEvent.target,d)&&(d=t.srcEvent.target),t.target=d}(e,n),e.emit("hammer.input",n),e.recognize(n),e.session.prevInput=n}function k(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:oe(e.pointers[n].clientX),clientY:oe(e.pointers[n].clientY)},n++;return{timeStamp:ae(),pointers:t,center:D(t),deltaX:e.deltaX,deltaY:e.deltaY}}function D(e){var t=e.length;if(1===t)return{x:oe(e[0].clientX),y:oe(e[0].clientY)};for(var n=0,r=0,i=0;i<t;)n+=e[i].clientX,r+=e[i].clientY,i++;return{x:oe(n/t),y:oe(r/t)}}function I(e,t,n){return{x:t/e||0,y:n/e||0}}function R(e,t){return e===t?ve:le(e)>=le(t)?e<0?be:_e:t<0?we:xe}function M(e,t,n){n||(n=Oe);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.sqrt(r*r+i*i)}function P(e,t,n){n||(n=Oe);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return 180*Math.atan2(i,r)/Math.PI}function N(){this.evEl=De,this.evWin=Ie,this.pressed=!1,O.apply(this,arguments)}function A(){this.evEl=Pe,this.evWin=Ne,O.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function L(){this.evTarget=Le,this.evWin=Fe,this.started=!1,O.apply(this,arguments)}function F(){this.evTarget=Ve,this.targetIds={},O.apply(this,arguments)}function j(){O.apply(this,arguments);var e=f(this.handler,this);this.touch=new F(this.manager,e),this.mouse=new N(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}function V(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var n={x:t.clientX,y:t.clientY};this.lastTouches.push(n);var r=this.lastTouches,i=function(){var e=r.indexOf(n);e>-1&&r.splice(e,1)};setTimeout(i,ze)}}function z(e,t){this.manager=e,this.set(t)}function B(e){this.options=te({},this.defaults,e||{}),this.id=ce++,this.manager=null,this.options.enable=m(this.options.enable,!0),this.state=Ue,this.simultaneous={},this.requireFail=[]}function H(e){return e&Qe?"cancel":e&$e?"end":e&Ke?"move":e&Ge?"start":""}function W(e){return e==xe?"down":e==we?"up":e==be?"left":e==_e?"right":""}function q(e,t){var n=t.manager;return n?n.get(e):e}function U(){B.apply(this,arguments)}function G(){U.apply(this,arguments),this.pX=null,this.pY=null}function K(){U.apply(this,arguments)}function $(){B.apply(this,arguments),this._timer=null,this._input=null}function Z(){U.apply(this,arguments)}function Q(){U.apply(this,arguments)}function Y(){B.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function X(e,t){return t=t||{},t.recognizers=m(t.recognizers,X.defaults.preset),new J(e,t)}function J(e,t){this.options=te({},X.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=function(e){return new(e.options.inputClass||(pe?A:fe?F:de?j:N))(e,T)}(this),this.touchAction=new z(this,this.options.touchAction),ee(this,!0),c(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}function ee(e,t){var n=e.element;if(n.style){var r;c(e.options.cssProps,function(i,o){r=E(n.style,o),t?(e.oldCssProps[r]=n.style[r],n.style[r]=i):n.style[r]=e.oldCssProps[r]||""}),t||(e.oldCssProps={})}}var te,ne=["","webkit","Moz","MS","ms","o"],re=o.createElement("div"),ie="function",oe=Math.round,le=Math.abs,ae=Date.now;te="function"!=typeof Object.assign?function(e){if(e===a||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n<arguments.length;n++){var r=arguments[n];if(r!==a&&null!==r)for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i])}return t}:Object.assign;var se=d(function(e,t,n){for(var r=Object.keys(t),i=0;i<r.length;)(!n||n&&e[r[i]]===a)&&(e[r[i]]=t[r[i]]),i++;return e},"extend","Use `assign`."),ue=d(function(e,t){return se(e,t,!0)},"merge","Use `assign`."),ce=1,de="ontouchstart"in i,pe=E(i,"PointerEvent")!==a,fe=de&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),he=25,me=1,ge=4,ye=8,ve=1,be=2,_e=4,we=8,xe=16,Ce=be|_e,Ee=we|xe,Se=Ce|Ee,Oe=["x","y"],Te=["clientX","clientY"];O.prototype={handler:function(){},init:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(S(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&y(this.element,this.evEl,this.domHandler),this.evTarget&&y(this.target,this.evTarget,this.domHandler),this.evWin&&y(S(this.element),this.evWin,this.domHandler)}};var ke={mousedown:me,mousemove:2,mouseup:ge},De="mousedown",Ie="mousemove mouseup";p(N,O,{handler:function(e){var t=ke[e.type];t&me&&0===e.button&&(this.pressed=!0),2&t&&1!==e.which&&(t=ge),this.pressed&&(t&ge&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:"mouse",srcEvent:e}))}});var Re={pointerdown:me,pointermove:2,pointerup:ge,pointercancel:ye,pointerout:ye},Me={2:"touch",3:"pen",4:"mouse",5:"kinect"},Pe="pointerdown",Ne="pointermove pointerup pointercancel";i.MSPointerEvent&&!i.PointerEvent&&(Pe="MSPointerDown",Ne="MSPointerMove MSPointerUp MSPointerCancel"),p(A,O,{handler:function(e){var t=this.store,n=!1,r=e.type.toLowerCase().replace("ms",""),i=Re[r],o=Me[e.pointerType]||e.pointerType,l="touch"==o,a=w(t,e.pointerId,"pointerId");i&me&&(0===e.button||l)?a<0&&(t.push(e),a=t.length-1):i&(ge|ye)&&(n=!0),a<0||(t[a]=e,this.callback(this.manager,i,{pointers:t,changedPointers:[e],pointerType:o,srcEvent:e}),n&&t.splice(a,1))}});var Ae={touchstart:me,touchmove:2,touchend:ge,touchcancel:ye},Le="touchstart",Fe="touchstart touchmove touchend touchcancel";p(L,O,{handler:function(e){var t=Ae[e.type];if(t===me&&(this.started=!0),this.started){var n=function(e,t){var n=x(e.touches),r=x(e.changedTouches);return t&(ge|ye)&&(n=C(n.concat(r),"identifier",!0)),[n,r]}.call(this,e,t);t&(ge|ye)&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:e})}}});var je={touchstart:me,touchmove:2,touchend:ge,touchcancel:ye},Ve="touchstart touchmove touchend touchcancel";p(F,O,{handler:function(e){var t=je[e.type],n=function(e,t){var n=x(e.touches),r=this.targetIds;if(t&(2|me)&&1===n.length)return r[n[0].identifier]=!0,[n,n];var i,o,l=x(e.changedTouches),a=[],s=this.target;if(o=n.filter(function(e){return v(e.target,s)}),t===me)for(i=0;i<o.length;)r[o[i].identifier]=!0,i++;for(i=0;i<l.length;)r[l[i].identifier]&&a.push(l[i]),t&(ge|ye)&&delete r[l[i].identifier],i++;return a.length?[C(o.concat(a),"identifier",!0),a]:void 0}.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:e})}});var ze=2500;p(j,O,{handler:function(e,t,n){var r="mouse"==n.pointerType;if(!(r&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if("touch"==n.pointerType)(function(e,t){e&me?(this.primaryTouch=t.changedPointers[0].identifier,V.call(this,t)):e&(ge|ye)&&V.call(this,t)}).call(this,t,n);else if(r&&function(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r<this.lastTouches.length;r++){var i=this.lastTouches[r],o=Math.abs(t-i.x),l=Math.abs(n-i.y);if(o<=25&&l<=25)return!0}return!1}.call(this,n))return;this.callback(e,t,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Be=E(re.style,"touchAction"),He=Be!==a,We="manipulation",qe=function(){if(!He)return!1;var e={},t=i.CSS&&i.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(n){e[n]=!t||i.CSS.supports("touch-action",n)}),e}();z.prototype={set:function(e){"compute"==e&&(e=this.compute()),He&&this.manager.element.style&&qe[e]&&(this.manager.element.style[Be]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return c(this.manager.recognizers,function(t){h(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),function(e){if(b(e,"none"))return"none";var t=b(e,"pan-x"),n=b(e,"pan-y");return t&&n?"none":t||n?t?"pan-x":"pan-y":b(e,We)?We:"auto"}(e.join(" "))},preventDefaults:function(e){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented)t.preventDefault();else{var r=this.actions,i=b(r,"none")&&!qe.none,o=b(r,"pan-y")&&!qe["pan-y"],l=b(r,"pan-x")&&!qe["pan-x"];if(i&&1===e.pointers.length&&e.distance<2&&e.deltaTime<250)return;if(!l||!o)return i||o&&n&Ce||l&&n&Ee?this.preventSrc(t):void 0}},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};var Ue=1,Ge=2,Ke=4,$e=8,Ze=$e,Qe=16;B.prototype={defaults:{},set:function(e){return te(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(u(e,"recognizeWith",this))return this;var t=this.simultaneous;return e=q(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return u(e,"dropRecognizeWith",this)?this:(e=q(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(u(e,"requireFailure",this))return this;var t=this.requireFail;return e=q(e,this),-1===w(t,e)&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(u(e,"dropRequireFailure",this))return this;e=q(e,this);var t=w(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){function t(t){n.manager.emit(t,e)}var n=this,r=this.state;r<$e&&t(n.options.event+H(r)),t(n.options.event),e.additionalEvent&&t(e.additionalEvent),r>=$e&&t(n.options.event+H(r))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=32},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(32|Ue)))return!1;e++}return!0},recognize:function(e){var t=te({},e);if(!h(this.options.enable,[this,t]))return this.reset(),void(this.state=32);this.state&(Ze|Qe|32)&&(this.state=Ue),this.state=this.process(t),this.state&(Ge|Ke|$e|Qe)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}},p(U,B,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return 0===t||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,r=t&(Ge|Ke),i=this.attrTest(e);return r&&(n&ye||!i)?t|Qe:r||i?n&ge?t|$e:t&Ge?t|Ke:Ge:32}}),p(G,U,{defaults:{event:"pan",threshold:10,pointers:1,direction:Se},getTouchAction:function(){var e=this.options.direction,t=[];return e&Ce&&t.push("pan-y"),e&Ee&&t.push("pan-x"),t},directionTest:function(e){var t=this.options,n=!0,r=e.distance,i=e.direction,o=e.deltaX,l=e.deltaY;return i&t.direction||(t.direction&Ce?(i=0===o?ve:o<0?be:_e,n=o!=this.pX,r=Math.abs(e.deltaX)):(i=0===l?ve:l<0?we:xe,n=l!=this.pY,r=Math.abs(e.deltaY))),e.direction=i,n&&r>t.threshold&&i&t.direction},attrTest:function(e){return U.prototype.attrTest.call(this,e)&&(this.state&Ge||!(this.state&Ge)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=W(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),p(K,U,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&Ge)},emit:function(e){1!==e.scale&&(e.additionalEvent=this.options.event+(e.scale<1?"in":"out")),this._super.emit.call(this,e)}}),p($,B,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return["auto"]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime>t.time;if(this._input=e,!r||!n||e.eventType&(ge|ye)&&!i)this.reset();else if(e.eventType&me)this.reset(),this._timer=s(function(){this.state=Ze,this.tryEmit()},t.time,this);else if(e.eventType&ge)return Ze;return 32},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===Ze&&(e&&e.eventType&ge?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=ae(),this.manager.emit(this.options.event,this._input)))}}),p(Z,U,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&Ge)}}),p(Q,U,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ce|Ee,pointers:1},getTouchAction:function(){return G.prototype.getTouchAction.call(this)},attrTest:function(e){var t,n=this.options.direction;return n&(Ce|Ee)?t=e.overallVelocity:n&Ce?t=e.overallVelocityX:n&Ee&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&le(t)>this.options.velocity&&e.eventType&ge},emit:function(e){var t=W(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),p(Y,B,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[We]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime<t.time;if(this.reset(),e.eventType&me&&0===this.count)return this.failTimeout();if(r&&i&&n){if(e.eventType!=ge)return this.failTimeout();var o=!this.pTime||e.timeStamp-this.pTime<t.interval,l=!this.pCenter||M(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,l&&o?this.count+=1:this.count=1,this._input=e,0==this.count%t.taps)return this.hasRequireFailures()?(this._timer=s(function(){this.state=Ze,this.tryEmit()},t.interval,this),Ge):Ze}return 32},failTimeout:function(){return this._timer=s(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==Ze&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),X.VERSION="2.0.7",X.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[Z,{enable:!1}],[K,{enable:!1},["rotate"]],[Q,{direction:Ce}],[G,{direction:Ce},["swipe"]],[Y],[Y,{event:"doubletap",taps:2},["tap"]],[$]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},J.prototype={set:function(e){return te(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?2:1},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,r=this.recognizers,i=t.curRecognizer;(!i||i&&i.state&Ze)&&(i=t.curRecognizer=null);for(var o=0;o<r.length;)n=r[o],2===t.stopped||i&&n!=i&&!n.canRecognizeWith(i)?n.reset():n.recognize(e),!i&&n.state&(Ge|Ke|$e)&&(i=t.curRecognizer=n),o++}},get:function(e){if(e instanceof B)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(u(e,"add",this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(u(e,"remove",this))return this;if(e=this.get(e)){var t=this.recognizers,n=w(t,e);-1!==n&&(t.splice(n,1),this.touchAction.update())}return this},on:function(e,t){if(e!==a&&t!==a){var n=this.handlers;return c(_(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this}},off:function(e,t){if(e!==a){var n=this.handlers;return c(_(e),function(e){t?n[e]&&n[e].splice(w(n[e],t),1):delete n[e]}),this}},emit:function(e,t){this.options.domEvents&&function(e,t){var n=o.createEvent("Event");n.initEvent(e,!0,!0),n.gesture=t,t.target.dispatchEvent(n)}(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(n&&n.length){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var r=0;r<n.length;)n[r](t),r++}},destroy:function(){this.element&&ee(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},te(X,{INPUT_START:me,INPUT_MOVE:2,INPUT_END:ge,INPUT_CANCEL:ye,STATE_POSSIBLE:Ue,STATE_BEGAN:Ge,STATE_CHANGED:Ke,STATE_ENDED:$e,STATE_RECOGNIZED:Ze,STATE_CANCELLED:Qe,STATE_FAILED:32,DIRECTION_NONE:ve,DIRECTION_LEFT:be,DIRECTION_RIGHT:_e,DIRECTION_UP:we,DIRECTION_DOWN:xe,DIRECTION_HORIZONTAL:Ce,DIRECTION_VERTICAL:Ee,DIRECTION_ALL:Se,Manager:J,Input:O,TouchAction:z,TouchInput:F,MouseInput:N,PointerEventInput:A,TouchMouseInput:j,SingleTouchInput:L,Recognizer:B,AttrRecognizer:U,Tap:Y,Pan:G,Swipe:Q,Pinch:K,Rotate:Z,Press:$,on:g,off:y,each:c,merge:ue,extend:se,assign:te,inherit:p,bindFn:f,prefixed:E}),(void 0!==i?i:"undefined"!=typeof self?self:{}).Hammer=X,(r=function(){return X}.call(t,n,t,e))===a||(e.exports=r)}(window,document)},rppw:function(e,t,n){var r=n("9wYb"),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},soMw:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.keys,l=r.key;r.exp({getOwnMetadataKeys:function(e){return o(i(e),arguments.length<2?void 0:l(arguments[1]))}})},t6ta:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=n("uNkO"),l=r.key,a=r.set;r.exp({metadata:function(e,t){return function(n,r){a(e,t,(void 0!==r?i:o)(n),l(r))}}})},tose:function(e,t,n){var r=n("+pQw"),i=n("gNkH"),o=n("A1WY"),l=Object.defineProperty;t.f=n("V+0c")?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return l(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},uIf7:function(module,__webpack_exports__,__webpack_require__){"use strict";function difference(e,t){return e.filter(function(e){return t.indexOf(e)<0})}function unliftState(e){return e.computedStates[e.currentStateIndex].state}function liftAction(e){return new PerformAction(e)}function applyOperators(e,t){return t.reduce(function(e,t){var n=t[0],r=t.slice(1);return n.apply(e,r)},e)}function computeNextEntry(e,t,n,r){if(r)return{state:n,error:"Interrupted by an error up the chain"};var i,o=n;try{o=e(n,t)}catch(e){i=e.toString(),console.error(e.stack||e)}return{state:o,error:i}}function recomputeStates(e,t,n,r,i,o,l){if(t>=e.length&&e.length===o.length)return e;for(var a=e.slice(0,t),s=t;s<o.length;s++){var u=o[s],c=i[u].action,d=a[s-1],p=d?d.state:r,f=d?d.error:void 0,h=l.indexOf(u)>-1?d:computeNextEntry(n,c,p,f);a.push(h)}return a}function liftInitialState(e,t){return{monitorState:t(void 0,{}),nextActionId:1,actionsById:{0:liftAction(INIT_ACTION)},stagedActionIds:[0],skippedActionIds:[],committedState:e,currentStateIndex:0,computedStates:[]}}function liftReducerWith(e,t,n,r){return void 0===r&&(r={}),function(i){return function(o,l){function a(e){for(var t=e,n=p.slice(1,t+1),r=0;r<n.length;r++){if(g[r+1].error){n=p.slice(1,(t=r)+1);break}delete c[n[r]]}f=f.filter(function(e){return-1===n.indexOf(e)}),p=[0].concat(p.slice(t+1)),h=g[t].state,g=g.slice(t),m=m>t?m-t:0}var s=o||t,u=s.monitorState,c=s.actionsById,d=s.nextActionId,p=s.stagedActionIds,f=s.skippedActionIds,h=s.committedState,m=s.currentStateIndex,g=s.computedStates;o||(c=Object.create(c));var y=0;switch(l.type){case RESET:c={0:liftAction(INIT_ACTION)},d=1,p=[0],f=[],h=e,m=0,g=[];break;case COMMIT:c={0:liftAction(INIT_ACTION)},d=1,p=[0],f=[],h=g[m].state,m=0,g=[];break;case ROLLBACK:c={0:liftAction(INIT_ACTION)},d=1,p=[0],f=[],m=0,g=[];break;case TOGGLE_ACTION:var v=l.id,b=f.indexOf(v);f=-1===b?[v].concat(f):f.filter(function(e){return e!==v}),y=p.indexOf(v);break;case SET_ACTIONS_ACTIVE:for(var _=l.start,w=l.end,x=l.active,C=[],E=_;E<w;E++)C.push(E);f=x?difference(f,C):f.concat(C),y=p.indexOf(_);break;case JUMP_TO_STATE:m=l.index,y=1/0;break;case SWEEP:p=difference(p,f),f=[],m=Math.min(m,p.length-1);break;case PERFORM_ACTION:r.maxAge&&p.length===r.maxAge&&a(1),m===p.length-1&&m++;var S=d++;c[S]=l,y=(p=p.concat([S])).length-1;break;case IMPORT_STATE:u=(O=l.nextLiftedState).monitorState,c=O.actionsById,d=O.nextActionId,p=O.stagedActionIds,f=O.skippedActionIds,h=O.committedState,m=O.currentStateIndex,g=O.computedStates;break;case __WEBPACK_IMPORTED_MODULE_1__ngrx_store__.p:case __WEBPACK_IMPORTED_MODULE_1__ngrx_store__.b:y=0,r.maxAge&&p.length>r.maxAge&&(g=recomputeStates(g,y,i,h,c,p,f),a(p.length-r.maxAge),y=1/0);break;default:y=1/0}return g=recomputeStates(g,y,i,h,c,p,f),u=n(u,l),{monitorState:u,actionsById:c,nextActionId:d,stagedActionIds:p,skippedActionIds:f,committedState:h,currentStateIndex:m,computedStates:g};var O}}}function createIsExtensionOrMonitorPresent(e,t){return Boolean(e)||t.monitor!==noMonitor}function createReduxDevtoolsExtension(){var e="__REDUX_DEVTOOLS_EXTENSION__";return"object"==typeof window&&void 0!==window[e]?window[e]:null}function createStateObservable(e){return e.state}function noMonitor(){return null}function createConfig(e){var t={maxAge:!1,monitor:noMonitor},n="function"==typeof e?e():e,r=Object.assign({},t,n);if(r.maxAge&&r.maxAge<2)throw new Error("Devtools 'maxAge' cannot be less than 2, got "+r.maxAge);return r}__webpack_require__.d(__webpack_exports__,"b",function(){return StoreDevtoolsModule}),__webpack_require__.d(__webpack_exports__,"a",function(){return StoreDevtools}),__webpack_require__.d(__webpack_exports__,"j",function(){return INITIAL_OPTIONS}),__webpack_require__.d(__webpack_exports__,"i",function(){return STORE_DEVTOOLS_CONFIG}),__webpack_require__.d(__webpack_exports__,"h",function(){return DevtoolsDispatcher}),__webpack_require__.d(__webpack_exports__,"l",function(){return DevtoolsExtension}),__webpack_require__.d(__webpack_exports__,"k",function(){return REDUX_DEVTOOLS_EXTENSION}),__webpack_require__.d(__webpack_exports__,"c",function(){return IS_EXTENSION_OR_MONITOR_PRESENT}),__webpack_require__.d(__webpack_exports__,"g",function(){return createConfig}),__webpack_require__.d(__webpack_exports__,"d",function(){return createIsExtensionOrMonitorPresent}),__webpack_require__.d(__webpack_exports__,"e",function(){return createReduxDevtoolsExtension}),__webpack_require__.d(__webpack_exports__,"f",function(){return createStateObservable});var __WEBPACK_IMPORTED_MODULE_0__angular_core__=__webpack_require__("LMZF"),__WEBPACK_IMPORTED_MODULE_1__ngrx_store__=__webpack_require__("ADVA"),__WEBPACK_IMPORTED_MODULE_2_rxjs_ReplaySubject__=__webpack_require__("5q5V"),__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__=__webpack_require__("dmC+"),__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_merge__=__webpack_require__("BThc"),__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_observeOn__=__webpack_require__("ozyc"),__WEBPACK_IMPORTED_MODULE_6_rxjs_operator_scan__=__webpack_require__("3k/+"),__WEBPACK_IMPORTED_MODULE_7_rxjs_operator_skip__=__webpack_require__("0l2a"),__WEBPACK_IMPORTED_MODULE_8_rxjs_operator_withLatestFrom__=__webpack_require__("ThPn"),__WEBPACK_IMPORTED_MODULE_9_rxjs_scheduler_queue__=__webpack_require__("Gcw1"),__WEBPACK_IMPORTED_MODULE_10_rxjs_Observable__=__webpack_require__("AP4T"),__WEBPACK_IMPORTED_MODULE_11_rxjs_observable_empty__=__webpack_require__("3m71"),__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__=__webpack_require__("6S6c"),__WEBPACK_IMPORTED_MODULE_13_rxjs_operator_share__=__webpack_require__("URbD"),__WEBPACK_IMPORTED_MODULE_14_rxjs_operator_switchMap__=__webpack_require__("GpNi"),__WEBPACK_IMPORTED_MODULE_15_rxjs_operator_takeUntil__=__webpack_require__("gy58"),__extends=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),PERFORM_ACTION="PERFORM_ACTION",RESET="RESET",ROLLBACK="ROLLBACK",COMMIT="COMMIT",SWEEP="SWEEP",TOGGLE_ACTION="TOGGLE_ACTION",SET_ACTIONS_ACTIVE="SET_ACTIONS_ACTIVE",JUMP_TO_STATE="JUMP_TO_STATE",IMPORT_STATE="IMPORT_STATE",PerformAction=function(){return function(e,t){if(this.action=e,this.timestamp=t,this.type=PERFORM_ACTION,void 0===e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?')}}(),Reset=function(){return function(e){this.timestamp=e,this.type=RESET}}(),Rollback=function(){return function(e){this.timestamp=e,this.type=ROLLBACK}}(),Commit=function(){return function(e){this.timestamp=e,this.type=COMMIT}}(),Sweep=function(){return function(){this.type=SWEEP}}(),ToggleAction=function(){return function(e){this.id=e,this.type=TOGGLE_ACTION}}(),JumpToState=function(){return function(e){this.index=e,this.type=JUMP_TO_STATE}}(),ImportState=function(){return function(e){this.nextLiftedState=e,this.type=IMPORT_STATE}}(),ExtensionActionTypes={START:"START",DISPATCH:"DISPATCH",STOP:"STOP",ACTION:"ACTION"},REDUX_DEVTOOLS_EXTENSION=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("Redux Devtools Extension"),DevtoolsExtension=function(){function DevtoolsExtension(e){this.instanceId="ngrx-store-"+Date.now(),this.devtoolsExtension=e,this.createActionStreams()}return DevtoolsExtension.prototype.notify=function(e,t){this.devtoolsExtension&&this.devtoolsExtension.send(null,t,{serialize:!1},this.instanceId)},DevtoolsExtension.prototype.createChangesObservable=function(){var e=this;return this.devtoolsExtension?new __WEBPACK_IMPORTED_MODULE_10_rxjs_Observable__.a(function(t){var n=e.devtoolsExtension.connect({instanceId:e.instanceId});return n.subscribe(function(e){return t.next(e)}),n.unsubscribe}):Object(__WEBPACK_IMPORTED_MODULE_11_rxjs_observable_empty__.a)()},DevtoolsExtension.prototype.createActionStreams=function(){var e=this,t=__WEBPACK_IMPORTED_MODULE_13_rxjs_operator_share__.a.call(this.createChangesObservable()),n=__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a.call(t,function(e){return e.type===ExtensionActionTypes.START}),r=__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a.call(t,function(e){return e.type===ExtensionActionTypes.STOP}),i=applyOperators(t,[[__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a,function(e){return e.type===ExtensionActionTypes.DISPATCH}],[__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a,function(t){return e.unwrapAction(t.payload)}]]),o=applyOperators(t,[[__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a,function(e){return e.type===ExtensionActionTypes.ACTION}],[__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a,function(t){return e.unwrapAction(t.payload)}]]),l=__WEBPACK_IMPORTED_MODULE_15_rxjs_operator_takeUntil__.a.call(o,r),a=__WEBPACK_IMPORTED_MODULE_15_rxjs_operator_takeUntil__.a.call(i,r);this.actions$=__WEBPACK_IMPORTED_MODULE_14_rxjs_operator_switchMap__.a.call(n,function(){return l}),this.liftedActions$=__WEBPACK_IMPORTED_MODULE_14_rxjs_operator_switchMap__.a.call(n,function(){return a})},DevtoolsExtension.prototype.unwrapAction=function(action){return"string"==typeof action?eval("("+action+")"):action},DevtoolsExtension}(),INIT_ACTION={type:__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.b},StoreDevtoolsConfig=function(){},STORE_DEVTOOLS_CONFIG=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("@ngrx/devtools Options"),INITIAL_OPTIONS=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("@ngrx/devtools Initial Config"),DevtoolsDispatcher=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t}(__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.a),StoreDevtools=function(){function e(e,t,n,r,i,o,l){var a=liftInitialState(o,l.monitor),s=liftReducerWith(o,a,l.monitor,l.maxAge?{maxAge:l.maxAge}:{}),u=applyOperators(t.asObservable(),[[__WEBPACK_IMPORTED_MODULE_7_rxjs_operator_skip__.a,1],[__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_merge__.a,r.actions$],[__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a,liftAction],[__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_merge__.a,e,r.liftedActions$],[__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_observeOn__.a,__WEBPACK_IMPORTED_MODULE_9_rxjs_scheduler_queue__.a]]),c=__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a.call(n,s),d=new __WEBPACK_IMPORTED_MODULE_2_rxjs_ReplaySubject__.a(1),p=applyOperators(u,[[__WEBPACK_IMPORTED_MODULE_8_rxjs_operator_withLatestFrom__.a,c],[__WEBPACK_IMPORTED_MODULE_6_rxjs_operator_scan__.a,function(e,t){var n=t[0],i=(0,t[1])(e.state,n);return r.notify(n,i),{state:i,action:n}},{state:a,action:null}]]).subscribe(function(e){var t=e.action;d.next(e.state),t.type===PERFORM_ACTION&&i.next(t.action)}),f=d.asObservable(),h=__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a.call(f,unliftState);this.stateSubscription=p,this.dispatcher=e,this.liftedState=f,this.state=h}return e.prototype.dispatch=function(e){this.dispatcher.next(e)},e.prototype.next=function(e){this.dispatcher.next(e)},e.prototype.error=function(e){},e.prototype.complete=function(){},e.prototype.performAction=function(e){this.dispatch(new PerformAction(e))},e.prototype.reset=function(){this.dispatch(new Reset)},e.prototype.rollback=function(){this.dispatch(new Rollback)},e.prototype.commit=function(){this.dispatch(new Commit)},e.prototype.sweep=function(){this.dispatch(new Sweep)},e.prototype.toggleAction=function(e){this.dispatch(new ToggleAction(e))},e.prototype.jumpToState=function(e){this.dispatch(new JumpToState(e))},e.prototype.importState=function(e){this.dispatch(new ImportState(e))},e}(),IS_EXTENSION_OR_MONITOR_PRESENT=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("Is Devtools Extension or Monitor Present"),StoreDevtoolsModule=function(){function e(){}return e.instrument=function(t){return void 0===t&&(t={}),{ngModule:e,providers:[DevtoolsExtension,DevtoolsDispatcher,StoreDevtools,{provide:INITIAL_OPTIONS,useValue:t},{provide:IS_EXTENSION_OR_MONITOR_PRESENT,deps:[REDUX_DEVTOOLS_EXTENSION,STORE_DEVTOOLS_CONFIG],useFactory:createIsExtensionOrMonitorPresent},{provide:REDUX_DEVTOOLS_EXTENSION,useFactory:createReduxDevtoolsExtension},{provide:STORE_DEVTOOLS_CONFIG,deps:[INITIAL_OPTIONS],useFactory:createConfig},{provide:__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.l,deps:[StoreDevtools],useFactory:createStateObservable},{provide:__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.h,useExisting:DevtoolsDispatcher}]}},e}()},uNkO:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},umMR:function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},vyV2:function(e,t,n){var r=n("+GRi"),i=n("rppw"),o=n("KM3d");e.exports=function(e){return function(t,n,l){var a,s=r(t),u=i(s.length),c=o(l,u);if(e&&n!=n){for(;u>c;)if((a=s[c++])!=a)return!0}else for(;u>c;c++)if((e||c in s)&&s[c]===n)return e||c||0;return!e&&-1}}},"w/BM":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},wP3s:function(e,t,n){"use strict";t.a=function(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(r){return"number"==typeof t&&(n=t,t=null),r.lift(new l(e,t,n))}};var r=n("6Xbx"),i=n("qgI0"),o=n("lI6h"),l=function(){function e(e,t,n){void 0===n&&(n=Number.POSITIVE_INFINITY),this.project=e,this.resultSelector=t,this.concurrent=n}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.project,this.resultSelector,this.concurrent))},e}(),a=function(e){function t(t,n,r,i){void 0===i&&(i=Number.POSITIVE_INFINITY),e.call(this,t),this.project=n,this.resultSelector=r,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.active++,this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){this.add(Object(i.a)(this,e,t,n))},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){this.resultSelector?this._notifyResultSelector(e,t,n,r):this.destination.next(t)},t.prototype._notifyResultSelector=function(e,t,n,r){var i;try{i=this.resultSelector(e,t,n,r)}catch(e){return void this.destination.error(e)}this.destination.next(i)},t.prototype.notifyComplete=function(e){var t=this.buffer;this.remove(e),this.active--,t.length>0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},t}(o.a)},wRXj:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("fAeS"),a=n("Un6q"),s=n("/zAi"),u=n("4cOY"),c=n("P0cP"),d=n("0nO6");t.DROPDOWN_VALUE_ACCESSOR={provide:d.NG_VALUE_ACCESSOR,useExisting:o.forwardRef(function(){return p}),multi:!0};var p=function(){function e(e,t,n,r,i,l){this.el=e,this.domHandler=t,this.renderer=n,this.cd=r,this.objectUtils=i,this.zone=l,this.scrollHeight="200px",this.autoWidth=!0,this.filterBy="label",this.lazy=!0,this.resetFilterOnHide=!1,this.dropdownIcon="fa fa-fw fa-caret-down",this.onChange=new o.EventEmitter,this.onFocus=new o.EventEmitter,this.onBlur=new o.EventEmitter,this.onModelChange=function(){},this.onModelTouched=function(){},this.panelVisible=!1}return e.prototype.ngAfterContentInit=function(){var e=this;this.templates.forEach(function(t){switch(t.getType()){case"item":default:e.itemTemplate=t.template}})},e.prototype.ngOnInit=function(){this.optionsToDisplay=this.options,this.updateSelectedOption(null)},Object.defineProperty(e.prototype,"options",{get:function(){return this._options},set:function(e){var t=this.optionLabel?this.objectUtils.generateSelectItems(e,this.optionLabel):e;this._options=t,this.optionsToDisplay=this._options,this.updateSelectedOption(this.value),this.optionsChanged=!0,this.filterValue&&this.filterValue.length&&this.activateFilter()},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.container=this.containerViewChild.nativeElement,this.panel=this.panelViewChild.nativeElement,this.itemsWrapper=this.itemsWrapperViewChild.nativeElement,this.editable&&this.updateEditableLabel(),this.updateDimensions(),this.initialized=!0,this.appendTo&&("body"===this.appendTo?document.body.appendChild(this.panel):this.domHandler.appendChild(this.panel,this.appendTo))},Object.defineProperty(e.prototype,"label",{get:function(){return this.selectedOption?this.selectedOption.label:null},enumerable:!0,configurable:!0}),e.prototype.updateEditableLabel=function(){this.editableInputViewChild&&this.editableInputViewChild.nativeElement&&(this.editableInputViewChild.nativeElement.value=this.selectedOption?this.selectedOption.label:this.value||"")},e.prototype.onItemClick=function(e,t){this.itemClick=!0,this.selectItem(e,t),this.focusViewChild.nativeElement.focus(),this.hide()},e.prototype.selectItem=function(e,t){this.selectedOption!=t&&(this.selectedOption=t,this.value=t.value,this.onModelChange(this.value),this.updateEditableLabel(),this.onChange.emit({originalEvent:e,value:this.value}))},e.prototype.ngAfterViewChecked=function(){var e=this;this.shown&&(this.onShow(),this.shown=!1),this.optionsChanged&&this.panelVisible&&(this.optionsChanged=!1,this.zone.runOutsideAngular(function(){setTimeout(function(){e.updateDimensions(),e.alignPanel()},1)})),this.selectedOptionUpdated&&this.itemsWrapper&&(this.domHandler.findSingle(this.panel,"li.ui-state-highlight")&&this.domHandler.scrollInView(this.itemsWrapper,this.domHandler.findSingle(this.panel,"li.ui-state-highlight")),this.selectedOptionUpdated=!1)},e.prototype.writeValue=function(e){this.filter&&this.resetFilter(),this.value=e,this.updateSelectedOption(e),this.updateEditableLabel(),this.cd.markForCheck()},e.prototype.resetFilter=function(){this.filterViewChild&&this.filterViewChild.nativeElement&&(this.filterViewChild.nativeElement.value=""),this.optionsToDisplay=this.options},e.prototype.updateSelectedOption=function(e){this.selectedOption=this.findOption(e,this.optionsToDisplay),this.placeholder||this.selectedOption||!this.optionsToDisplay||!this.optionsToDisplay.length||this.editable||(this.selectedOption=this.optionsToDisplay[0]),this.selectedOptionUpdated=!0},e.prototype.registerOnChange=function(e){this.onModelChange=e},e.prototype.registerOnTouched=function(e){this.onModelTouched=e},e.prototype.setDisabledState=function(e){this.disabled=e},e.prototype.updateDimensions=function(){if(this.autoWidth){var e=this.domHandler.findSingle(this.el.nativeElement,"select");this.style&&(this.style.width||this.style["min-width"])||(this.el.nativeElement.children[0].style.width=e.offsetWidth+30+"px")}},e.prototype.onMouseclick=function(e){var t=this;this.disabled||this.readonly||(this.selfClick=!0,this.itemClick||(this.focusViewChild.nativeElement.focus(),this.panelVisible?this.hide():(this.show(),void 0!=this.filterViewChild&&setTimeout(function(){t.filterViewChild.nativeElement.focus()},200))))},e.prototype.onEditableInputClick=function(e){this.itemClick=!0,this.bindDocumentClickListener()},e.prototype.onEditableInputFocus=function(e){this.focus=!0,this.hide()},e.prototype.onEditableInputChange=function(e){this.value=e.target.value,this.updateSelectedOption(this.value),this.onModelChange(this.value),this.onChange.emit({originalEvent:e,value:this.value})},e.prototype.onShow=function(){if(this.options&&this.options.length){this.alignPanel(),this.bindDocumentClickListener();var e=this.domHandler.findSingle(this.itemsWrapper,".ui-dropdown-item.ui-state-highlight");e&&this.domHandler.scrollInView(this.itemsWrapper,e)}},e.prototype.show=function(){this.appendTo&&(this.panel.style.minWidth=this.domHandler.getWidth(this.container)+"px"),this.panel.style.zIndex=String(++u.DomHandler.zindex),this.panelVisible=!0,this.shown=!0},e.prototype.hide=function(){this.panelVisible=!1,this.filter&&this.resetFilterOnHide&&this.resetFilter()},e.prototype.alignPanel=function(){this.appendTo?this.domHandler.absolutePosition(this.panel,this.container):this.domHandler.relativePosition(this.panel,this.container)},e.prototype.onInputFocus=function(e){this.focus=!0,this.onFocus.emit(e)},e.prototype.onInputBlur=function(e){this.focus=!1,this.onModelTouched(),this.onBlur.emit(e)},e.prototype.onKeydown=function(e){if(!this.readonly){var t=this.selectedOption?this.findOptionIndex(this.selectedOption.value,this.optionsToDisplay):-1;switch(e.which){case 40:if(!this.panelVisible&&e.altKey)this.show();else if(-1!==t){var n=t+1;n!=this.optionsToDisplay.length&&(this.selectItem(e,this.optionsToDisplay[n]),this.selectedOptionUpdated=!0)}else this.optionsToDisplay&&this.selectItem(e,this.optionsToDisplay[0]);e.preventDefault();break;case 38:t>0&&(this.selectItem(e,this.optionsToDisplay[t-1]),this.selectedOptionUpdated=!0),e.preventDefault();break;case 32:case 32:this.panelVisible||(this.show(),e.preventDefault());break;case 13:this.hide(),e.preventDefault();break;case 27:case 9:this.hide()}}},e.prototype.findOptionIndex=function(e,t){var n=-1;if(t)for(var r=0;r<t.length;r++)if(null==e&&null==t[r].value||this.objectUtils.equals(e,t[r].value,this.dataKey)){n=r;break}return n},e.prototype.findOption=function(e,t){var n=this.findOptionIndex(e,t);return-1!=n?t[n]:null},e.prototype.onFilter=function(e){var t=e.target.value.toLowerCase();t&&t.length?(this.filterValue=t,this.activateFilter()):(this.filterValue=null,this.optionsToDisplay=this.options),this.optionsChanged=!0},e.prototype.activateFilter=function(){var e=this.filterBy.split(",");this.options&&this.options.length&&(this.optionsToDisplay=this.objectUtils.filter(this.options,e,this.filterValue),this.optionsChanged=!0)},e.prototype.applyFocus=function(){this.editable?this.domHandler.findSingle(this.el.nativeElement,".ui-dropdown-label.ui-inputtext").focus():this.domHandler.findSingle(this.el.nativeElement,"input[readonly]").focus()},e.prototype.bindDocumentClickListener=function(){var e=this;this.documentClickListener||(this.documentClickListener=this.renderer.listen("document","click",function(){e.selfClick||e.itemClick||(e.panelVisible=!1,e.unbindDocumentClickListener()),e.selfClick=!1,e.itemClick=!1,e.cd.markForCheck()}))},e.prototype.unbindDocumentClickListener=function(){this.documentClickListener&&(this.documentClickListener(),this.documentClickListener=null)},e.prototype.ngOnDestroy=function(){this.initialized=!1,this.unbindDocumentClickListener(),this.appendTo&&this.el.nativeElement.appendChild(this.panel)},e}();r([o.Input(),i("design:type",String)],p.prototype,"scrollHeight",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"filter",void 0),r([o.Input(),i("design:type",String)],p.prototype,"name",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"style",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"panelStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"styleClass",void 0),r([o.Input(),i("design:type",String)],p.prototype,"panelStyleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"disabled",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"readonly",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"autoWidth",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"required",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"editable",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"appendTo",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"tabindex",void 0),r([o.Input(),i("design:type",String)],p.prototype,"placeholder",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterPlaceholder",void 0),r([o.Input(),i("design:type",String)],p.prototype,"inputId",void 0),r([o.Input(),i("design:type",String)],p.prototype,"dataKey",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterBy",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"lazy",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"autofocus",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"resetFilterOnHide",void 0),r([o.Input(),i("design:type",String)],p.prototype,"dropdownIcon",void 0),r([o.Input(),i("design:type",String)],p.prototype,"optionLabel",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"onChange",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"onFocus",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"onBlur",void 0),r([o.ViewChild("container"),i("design:type",o.ElementRef)],p.prototype,"containerViewChild",void 0),r([o.ViewChild("panel"),i("design:type",o.ElementRef)],p.prototype,"panelViewChild",void 0),r([o.ViewChild("itemswrapper"),i("design:type",o.ElementRef)],p.prototype,"itemsWrapperViewChild",void 0),r([o.ViewChild("filter"),i("design:type",o.ElementRef)],p.prototype,"filterViewChild",void 0),r([o.ViewChild("in"),i("design:type",o.ElementRef)],p.prototype,"focusViewChild",void 0),r([o.ViewChild("editableInput"),i("design:type",o.ElementRef)],p.prototype,"editableInputViewChild",void 0),r([o.ContentChildren(s.PrimeTemplate),i("design:type",o.QueryList)],p.prototype,"templates",void 0),r([o.Input(),i("design:type",Array),i("design:paramtypes",[Array])],p.prototype,"options",null),p=r([o.Component({selector:"p-dropdown",template:'\n         <div #container [ngClass]="{\'ui-dropdown ui-widget ui-state-default ui-corner-all ui-helper-clearfix\':true,\n            \'ui-state-disabled\':disabled,\'ui-dropdown-open\':panelVisible,\'ui-state-focus\':focus}"\n            (click)="onMouseclick($event)" [ngStyle]="style" [class]="styleClass">\n            <div class="ui-helper-hidden-accessible" *ngIf="autoWidth">\n                <select [required]="required" [attr.name]="name" [attr.aria-label]="selectedOption ? selectedOption.label : \' \'" tabindex="-1" aria-hidden="true">\n                    <option *ngIf="placeholder">{{placeholder}}</option>\n                    <option *ngFor="let option of options" [value]="option.value" [selected]="selectedOption == option">{{option.label}}</option>\n                </select>\n            </div>\n            <div class="ui-helper-hidden-accessible">\n                <input #in [attr.id]="inputId" type="text" [attr.aria-label]="selectedOption ? selectedOption.label : \' \'" readonly (focus)="onInputFocus($event)" role="listbox"\n                    (blur)="onInputBlur($event)" (keydown)="onKeydown($event)" [disabled]="disabled" [attr.tabindex]="tabindex" [attr.autofocus]="autofocus">\n            </div>\n            <label [ngClass]="{\'ui-dropdown-label ui-inputtext ui-corner-all\':true,\'ui-dropdown-label-empty\':(label == null || label.length === 0)}" *ngIf="!editable && (label != null)">{{label||\'empty\'}}</label>\n            <label [ngClass]="{\'ui-dropdown-label ui-inputtext ui-corner-all ui-placeholder\':true,\'ui-dropdown-label-empty\': (placeholder == null || placeholder.length === 0)}" *ngIf="!editable && (label == null)">{{placeholder||\'empty\'}}</label>\n            <input #editableInput type="text" [attr.aria-label]="selectedOption ? selectedOption.label : \' \'" class="ui-dropdown-label ui-inputtext ui-corner-all" *ngIf="editable" [disabled]="disabled" [attr.placeholder]="placeholder"\n                        (click)="onEditableInputClick($event)" (input)="onEditableInputChange($event)" (focus)="onEditableInputFocus($event)" (blur)="onInputBlur($event)">\n            <div class="ui-dropdown-trigger ui-state-default ui-corner-right">\n                <span class="ui-clickable" [ngClass]="dropdownIcon"></span>\n            </div>\n            <div #panel [ngClass]="\'ui-dropdown-panel ui-widget-content ui-corner-all ui-shadow\'" [@panelState]="panelVisible ? \'visible\' : \'hidden\'"\n                [style.display]="panelVisible ? \'block\' : \'none\'" [ngStyle]="panelStyle" [class]="panelStyleClass">\n                <div *ngIf="filter" class="ui-dropdown-filter-container" (input)="onFilter($event)" (click)="$event.stopPropagation()">\n                    <input #filter type="text" autocomplete="off" class="ui-dropdown-filter ui-inputtext ui-widget ui-state-default ui-corner-all" [attr.placeholder]="filterPlaceholder"\n                    (keydown.enter)="$event.preventDefault()" (keydown)="onKeydown($event)">\n                    <span class="fa fa-search"></span>\n                </div>\n                <div #itemswrapper class="ui-dropdown-items-wrapper" [style.max-height]="scrollHeight||\'auto\'">\n                    <ul class="ui-dropdown-items ui-dropdown-list ui-widget-content ui-widget ui-corner-all ui-helper-reset" *ngIf="lazy ? panelVisible : true">\n                        <li *ngFor="let option of optionsToDisplay;let i=index"\n                            [ngClass]="{\'ui-dropdown-item ui-corner-all\':true, \'ui-state-highlight\':(selectedOption == option),\n                            \'ui-dropdown-item-empty\':!option.label||option.label.length === 0}"\n                            (click)="onItemClick($event, option)">\n                            <span *ngIf="!itemTemplate">{{option.label||\'empty\'}}</span>\n                            <ng-template [pTemplateWrapper]="itemTemplate" [item]="option" *ngIf="itemTemplate"></ng-template>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n    ',animations:[l.trigger("panelState",[l.state("hidden",l.style({opacity:0})),l.state("visible",l.style({opacity:1})),l.transition("visible => hidden",l.animate("400ms ease-in")),l.transition("hidden => visible",l.animate("400ms ease-out"))])],providers:[u.DomHandler,c.ObjectUtils,t.DROPDOWN_VALUE_ACCESSOR]})],p),t.Dropdown=p;var f=function(){};f=r([o.NgModule({imports:[a.CommonModule,s.SharedModule],exports:[p,s.SharedModule],declarations:[p]})],f),t.DropdownModule=f},wclm:function(e,t,n){"use strict";var r=n("6Xbx"),i=function(){function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}return e.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},e.now=Date.now?Date.now:function(){return+new Date},e}();n.d(t,"a",function(){return o});var o=function(e){function t(){e.apply(this,arguments),this.actions=[],this.active=!1,this.scheduled=void 0}return Object(r.__extends)(t,e),t.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},t}(i)},xI8H:function(e,t,n){var r=n("c09d")("meta"),i=n("JXkd"),o=n("rMsi"),l=n("tose").f,a=0,s=Object.isExtensible||function(){return!0},u=!n("umMR")(function(){return s(Object.preventExtensions({}))}),c=function(e){l(e,r,{value:{i:"O"+ ++a,w:{}}})},d=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!s(e))return"F";if(!t)return"E";c(e)}return e[r].i},getWeak:function(e,t){if(!o(e,r)){if(!s(e))return!0;if(!t)return!1;c(e)}return e[r].w},onFreeze:function(e){return u&&d.NEED&&s(e)&&!o(e,r)&&c(e),e}}},xIGM:function(e,t,n){"use strict";(function(e){n.d(t,"a",function(){return o});var r="undefined"!=typeof window&&window,i="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,o=r||void 0!==e&&e||i}).call(t,n("fRUx"))},yIWP:function(e,t,n){var r=n("Iclu")("keys"),i=n("c09d");e.exports=function(e){return r[e]||(r[e]=i(e))}}},[0]);
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
deleted file mode 100644
index 053fad1..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([1],{"+GRi":function(e,t,n){var r=n("Wo2w"),o=n("Wy9r");e.exports=function(e){return r(o(e))}},"+iEx":function(e,t,n){n("fHxy"),n("5GJ3"),n("X0O/"),n("HCkn"),n("ncNB"),n("soMw"),n("8sYH"),n("IJ3P"),n("t6ta"),e.exports=n("b4gG").Reflect},"+pQw":function(e,t,n){var r=n("JXkd");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},1:function(e,t,n){e.exports=n("TU+8")},"2Fuj":function(e,t,n){var r=n("R5c1"),o=n("a/Sk");e.exports=Object.keys||function(e){return r(e,o)}},"3LDD":function(e,t,n){"use strict";var r=n("tose").f,o=n("51pc"),i=n("pBmS"),a=n("pa70"),c=n("Lcie"),u=n("p/bR"),s=n("WsSm"),l=n("w/BM"),f=n("KpXt"),p=n("V+0c"),h=n("xI8H").fastKey,d=n("Y5fy"),v=p?"_s":"size",y=function(e,t){var n,r=h(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,s){var l=e(function(e,r){c(e,l,t,"_i"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[v]=0,void 0!=r&&u(r,n,e[s],e)});return i(l.prototype,{clear:function(){for(var e=d(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[v]=0},delete:function(e){var n=d(this,t),r=y(n,e);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[v]--}return!!r},forEach:function(e){d(this,t);for(var n,r=a(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!y(d(this,t),e)}}),p&&r(l.prototype,"size",{get:function(){return d(this,t)[v]}}),l},def:function(e,t,n){var r,o,i=y(e,t);return i?i.v=n:(e._l=i={i:o=h(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[v]++,"F"!==o&&(e._i[o]=i)),e},getEntry:y,setStrong:function(e,t,n){s(e,t,function(e,n){this._t=d(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))},n?"entries":"values",!n,!0),f(t)}}},"3r0D":function(e,t,n){var r=n("Iclu")("wks"),o=n("c09d"),i=n("ptrv").Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},"51pc":function(e,t,n){var r=n("+pQw"),o=n("ewdp"),i=n("a/Sk"),a=n("yIWP")("IE_PROTO"),c=function(){},u=function(){var e,t=n("BQSv")("iframe"),r=i.length;for(t.style.display="none",n("Ed9o").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),u=e.F;r--;)delete u.prototype[i[r]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(c.prototype=r(e),n=new c,c.prototype=null,n[a]=e):n=u(),void 0===t?n:o(n,t)}},"5GJ3":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.key,a=r.map,c=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:i(arguments[2]),r=a(o(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var u=c.get(t);return u.delete(n),!!u.size||c.delete(t)}})},"5oDA":function(e,t,n){var r=n("JXkd"),o=n("+pQw"),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("pa70")(Function.call,n("6De9").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},"6De9":function(e,t,n){var r=n("9e9+"),o=n("piOq"),i=n("+GRi"),a=n("A1WY"),c=n("rMsi"),u=n("gNkH"),s=Object.getOwnPropertyDescriptor;t.f=n("V+0c")?s:function(e,t){if(e=i(e),t=a(t,!0),u)try{return s(e,t)}catch(e){}if(c(e,t))return o(!r.f.call(e,t),e[t])}},"8sYH":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("TJLg"),a=r.has,c=r.key,u=function(e,t,n){if(a(e,t,n))return!0;var r=i(t);return null!==r&&u(e,r,n)};r.exp({hasMetadata:function(e,t){return u(e,o(t),arguments.length<3?void 0:c(arguments[2]))}})},"9ScN":function(e,t,n){"use strict";var r=n("51pc"),o=n("piOq"),i=n("P6IN"),a={};n("gxdV")(a,n("3r0D")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},"9e9+":function(e,t){t.f={}.propertyIsEnumerable},"9wYb":function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},A1WY:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},BCYq:function(e,t,n){var r=n("pa70"),o=n("Wo2w"),i=n("RT4T"),a=n("rppw"),c=n("UKZQ");e.exports=function(e,t){var n=1==e,u=2==e,s=3==e,l=4==e,f=6==e,p=5==e||f,h=t||c;return function(t,c,d){for(var v,y,g=i(t),k=o(g),m=r(c,d,3),_=a(k.length),b=0,w=n?h(t,_):u?h(t,0):void 0;_>b;b++)if((p||b in k)&&(v=k[b],y=m(v,b,g),e))if(n)w[b]=y;else if(y)switch(e){case 3:return!0;case 5:return v;case 6:return b;case 2:w.push(v)}else if(l)return!1;return f?-1:s||l?l:w}}},BQSv:function(e,t,n){var r=n("JXkd"),o=n("ptrv").document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},CDXM:function(e,t,n){var r=n("ptrv"),o=n("b4gG"),i=n("gxdV"),a=n("lfBE"),c=n("pa70"),u=function(e,t,n){var s,l,f,p,h=e&u.F,d=e&u.G,v=e&u.P,y=e&u.B,g=d?r:e&u.S?r[t]||(r[t]={}):(r[t]||{}).prototype,k=d?o:o[t]||(o[t]={}),m=k.prototype||(k.prototype={});d&&(n=t);for(s in n)f=((l=!h&&g&&void 0!==g[s])?g:n)[s],p=y&&l?c(f,r):v&&"function"==typeof f?c(Function.call,f):f,g&&a(g,s,f,e&u.U),k[s]!=f&&i(k,s,p),v&&m[s]!=f&&(m[s]=f)};r.core=o,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},Ed9o:function(e,t,n){var r=n("ptrv").document;e.exports=r&&r.documentElement},HCkn:function(e,t,n){var r=n("Ps07"),o=n("WGJ/"),i=n("gBtn"),a=n("+pQw"),c=n("TJLg"),u=i.keys,s=i.key,l=function(e,t){var n=u(e,t),i=c(e);if(null===i)return n;var a=l(i,t);return a.length?n.length?o(new r(n.concat(a))):a:n};i.exp({getMetadataKeys:function(e){return l(a(e),arguments.length<2?void 0:s(arguments[1]))}})},IJ3P:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.has,a=r.key;r.exp({hasOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},Iclu:function(e,t,n){var r=n("ptrv"),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},JXkd:function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},KGrn:function(e,t){e.exports=!1},KM3d:function(e,t,n){var r=n("9wYb"),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},"KpI+":function(e,t,n){var r=n("lexG"),o=n("3r0D")("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},KpXt:function(e,t,n){"use strict";var r=n("ptrv"),o=n("tose"),i=n("V+0c"),a=n("3r0D")("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},Lcie:function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},P6IN:function(e,t,n){var r=n("tose").f,o=n("rMsi"),i=n("3r0D")("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},Ps07:function(e,t,n){"use strict";var r=n("3LDD"),o=n("Y5fy");e.exports=n("cpZ/")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},QZhw:function(e,t,n){"use strict";var r,o=n("BCYq")(0),i=n("lfBE"),a=n("xI8H"),c=n("rIdM"),u=n("XRS9"),s=n("JXkd"),l=n("umMR"),f=n("Y5fy"),p=a.getWeak,h=Object.isExtensible,d=u.ufstore,v={},y=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},g={get:function(e){if(s(e)){var t=p(e);return!0===t?d(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(f(this,"WeakMap"),e,t)}},k=e.exports=n("cpZ/")("WeakMap",y,g,u,!0,!0);l(function(){return 7!=(new k).set((Object.freeze||Object)(v),7).get(v)})&&(c((r=u.getConstructor(y,"WeakMap")).prototype,g),a.NEED=!0,o(["delete","has","get","set"],function(e){var t=k.prototype,n=t[e];i(t,e,function(t,o){if(s(t)&&!h(t)){this._f||(this._f=new r);var i=this._f[e](t,o);return"set"==e?this:i}return n.call(this,t,o)})}))},R5c1:function(e,t,n){var r=n("rMsi"),o=n("+GRi"),i=n("vyV2")(!1),a=n("yIWP")("IE_PROTO");e.exports=function(e,t){var n,c=o(e),u=0,s=[];for(n in c)n!=a&&r(c,n)&&s.push(n);for(;t.length>u;)r(c,n=t[u++])&&(~i(s,n)||s.push(n));return s}},RT4T:function(e,t,n){var r=n("Wy9r");e.exports=function(e){return Object(r(e))}},TJLg:function(e,t,n){var r=n("rMsi"),o=n("RT4T"),i=n("yIWP")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},"TU+8":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("+iEx"),o=(n.n(r),n("eFQL"));n.n(o)},UKZQ:function(e,t,n){var r=n("a7b8");e.exports=function(e,t){return new(r(e))(t)}},ULWX:function(e,t,n){var r=n("+pQw");e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},UlVq:function(e,t,n){var r=n("3r0D")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},Ula3:function(e,t,n){var r=n("JXkd"),o=n("5oDA").set;e.exports=function(e,t,n){var i,a=t.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(e,i),e}},"V+0c":function(e,t,n){e.exports=!n("umMR")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},VceJ:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"WGJ/":function(e,t,n){var r=n("p/bR");e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},Wo2w:function(e,t,n){var r=n("VceJ");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},WsSm:function(e,t,n){"use strict";var r=n("KGrn"),o=n("CDXM"),i=n("lfBE"),a=n("gxdV"),c=n("rMsi"),u=n("lexG"),s=n("9ScN"),l=n("P6IN"),f=n("TJLg"),p=n("3r0D")("iterator"),h=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,t,n,v,y,g,k){s(n,t,v);var m,_,b,w=function(e){if(!h&&e in x)return x[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},T=t+" Iterator",E="values"==y,O=!1,x=e.prototype,S=x[p]||x["@@iterator"]||y&&x[y],D=!h&&S||w(y),P=y?E?w("entries"):D:void 0,j="Array"==t?x.entries||S:S;if(j&&(b=f(j.call(new e)))!==Object.prototype&&b.next&&(l(b,T,!0),r||c(b,p)||a(b,p,d)),E&&S&&"values"!==S.name&&(O=!0,D=function(){return S.call(this)}),r&&!k||!h&&!O&&x[p]||a(x,p,D),u[t]=D,u[T]=d,y)if(m={values:E?D:w("values"),keys:g?D:w("keys"),entries:P},k)for(_ in m)_ in x||i(x,_,m[_]);else o(o.P+o.F*(h||O),t,m);return m}},Wy9r:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},"X0O/":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("TJLg"),a=r.has,c=r.get,u=r.key,s=function(e,t,n){if(a(e,t,n))return c(e,t,n);var r=i(t);return null!==r?s(e,r,n):void 0};r.exp({getMetadata:function(e,t){return s(e,o(t),arguments.length<3?void 0:u(arguments[2]))}})},XRS9:function(e,t,n){"use strict";var r=n("pBmS"),o=n("xI8H").getWeak,i=n("+pQw"),a=n("JXkd"),c=n("Lcie"),u=n("p/bR"),s=n("BCYq"),l=n("rMsi"),f=n("Y5fy"),p=s(5),h=s(6),d=0,v=function(e){return e._l||(e._l=new y)},y=function(){this.a=[]},g=function(e,t){return p(e.a,function(e){return e[0]===t})};y.prototype={get:function(e){var t=g(this,e);if(t)return t[1]},has:function(e){return!!g(this,e)},set:function(e,t){var n=g(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,i){var s=e(function(e,r){c(e,s,t,"_i"),e._t=t,e._i=d++,e._l=void 0,void 0!=r&&u(r,n,e[i],e)});return r(s.prototype,{delete:function(e){if(!a(e))return!1;var n=o(e);return!0===n?v(f(this,t)).delete(e):n&&l(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=o(e);return!0===n?v(f(this,t)).has(e):n&&l(n,this._i)}}),s},def:function(e,t,n){var r=o(i(t),!0);return!0===r?v(e).set(t,n):r[e._i]=n,e},ufstore:v}},Y5fy:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},ZI9W:function(e,t,n){"use strict";var r=n("3LDD"),o=n("Y5fy");e.exports=n("cpZ/")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},"a/Sk":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},a7b8:function(e,t,n){var r=n("JXkd"),o=n("rKhO"),i=n("3r0D")("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},b4gG:function(e,t){var n=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=n)},c09d:function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},"cpZ/":function(e,t,n){"use strict";var r=n("ptrv"),o=n("CDXM"),i=n("lfBE"),a=n("pBmS"),c=n("xI8H"),u=n("p/bR"),s=n("Lcie"),l=n("JXkd"),f=n("umMR"),p=n("UlVq"),h=n("P6IN"),d=n("Ula3");e.exports=function(e,t,n,v,y,g){var k=r[e],m=k,_=y?"set":"add",b=m&&m.prototype,w={},T=function(e){var t=b[e];i(b,e,"delete"==e?function(e){return!(g&&!l(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(g&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return g&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof m&&(g||b.forEach&&!f(function(){(new m).entries().next()}))){var E=new m,O=E[_](g?{}:-0,1)!=E,x=f(function(){E.has(1)}),S=p(function(e){new m(e)}),D=!g&&f(function(){for(var e=new m,t=5;t--;)e[_](t,t);return!e.has(-0)});S||((m=t(function(t,n){s(t,m,e);var r=d(new k,t,m);return void 0!=n&&u(n,y,r[_],r),r})).prototype=b,b.constructor=m),(x||D)&&(T("delete"),T("has"),y&&T("get")),(D||O)&&T(_),g&&b.clear&&delete b.clear}else m=v.getConstructor(t,e,y,_),a(m.prototype,n),c.NEED=!0;return h(m,e),w[e]=m,o(o.G+o.W+o.F*(m!=k),w),g||v.setStrong(m,e,y),m}},"dXJ/":function(e,t,n){var r=n("VceJ"),o=n("3r0D")("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},eFQL:function(e,t,n){(function(e){!function(){"use strict";function t(e,t){for(var n=e.length-1;n>=0;n--)typeof e[n]===k&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function n(e){return!e||!1!==e.writable&&(typeof e.get!==k||typeof e.set!==m)}function r(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n&&Object.getOwnPropertyDescriptor(n,t)&&(r={enumerable:!0,configurable:!0}),r&&r.configurable){delete r.writable,delete r.value;var o=r.get,i=t.substr(2),a=O[i];a||(a=O[i]=y("ON_PROPERTY"+i)),r.set=function(t){var n=this;n||e!==g||(n=g),n&&(n[a]&&n.removeEventListener(i,x),"function"==typeof t?(n[a]=t,n.addEventListener(i,x,!1)):n[a]=null)},r.get=function(){var n=this;if(n||e!==g||(n=g),!n)return null;var i=n[a];if(i)return i;if(o){var c=o&&o.apply(this);if(c)return r.set.apply(this,[c]),typeof n[_]===k&&n.removeAttribute(t),c}return null},Object.defineProperty(e,t,r)}}function o(e,t,n){if(t)for(var o=0;o<t.length;o++)r(e,"on"+t[o],n);else{var i=[];for(var a in e)"on"==a.substr(0,2)&&i.push(a);for(var c=0;c<i.length;c++)r(e,i[c],n)}}function i(e){var n=g[e];if(n){g[y(e)]=n,g[e]=function(){var r=t(arguments,e);switch(r.length){case 0:this[S]=new n;break;case 1:this[S]=new n(r[0]);break;case 2:this[S]=new n(r[0],r[1]);break;case 3:this[S]=new n(r[0],r[1],r[2]);break;case 4:this[S]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},c(g[e],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof o[t]?g[e].prototype[t]=function(){return this[S][t].apply(this[S],arguments)}:Object.defineProperty(g[e].prototype,t,{set:function(n){"function"==typeof n?(this[S][t]=Zone.current.wrap(n,e+"."+t),c(this[S][t],n)):this[S][t]=n},get:function(){return this[S][t]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(g[e][r]=n[r])}}function a(e,t,r){for(var o=e;o&&!o.hasOwnProperty(t);)o=Object.getPrototypeOf(o);!o&&e[t]&&(o=e);var i,a=y(t);if(o&&!(i=o[a])&&(i=o[a]=o[t],n(o&&Object.getOwnPropertyDescriptor(o,t)))){var u=r(i,a,t);o[t]=function(){return u(this,arguments)},c(o[t],i)}return i}function c(e,t){e[y("OriginalDelegate")]=t}function u(e,t,n){function r(t,n){if(!t)return!1;var r=!0;n&&void 0!==n.useGlobalCallback&&(r=n.useGlobalCallback);var d=n&&n.validateHandler,k=!0;n&&void 0!==n.checkDuplicate&&(k=n.checkDuplicate);var m=!1;n&&void 0!==n.returnTarget&&(m=n.returnTarget);for(var _=t;_&&!_.hasOwnProperty(o);)_=Object.getPrototypeOf(_);if(!_&&t[o]&&(_=t),!_)return!1;if(_[l])return!1;var b,w={},T=_[l]=_[o],E=_[y(i)]=_[i],O=_[y(a)]=_[a],x=_[y(u)]=_[u];n&&n.prependEventListenerFnName&&(b=_[y(n.prependEventListenerFnName)]=_[n.prependEventListenerFnName]);var S=r?function(e){if(!e.isRemoved){var t=C[e.eventName],n=void 0;t&&(n=t[e.capture?Z:z]);var r=n&&e.target[n];if(r)for(var o=0;o<r.length;o++)if(r[o]===e){r.splice(o,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return E.apply(e.target,[e.eventName,e.capture?g:v,e.options])}:function(e){return E.apply(e.target,[e.eventName,e.invoke,e.options])},D=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:function(e,t){var n=typeof t;return n===H&&e.callback===t||n===F&&e.originalDelegate===t},P=function(t,n,o,i,a,c){return void 0===a&&(a=!1),void 0===c&&(c=!1),function(){var u=this||e,s=(Zone,arguments[1]);if(!s)return t.apply(this,arguments);var l=!1;if(typeof s!==H){if(!s.handleEvent)return t.apply(this,arguments);l=!0}if(!d||d(t,s,u,arguments)){var f,p=arguments[0],h=arguments[2],v=!1;void 0===h?f=!1:!0===h?f=!0:!1===h?f=!1:(f=!!h&&!!h.capture,v=!!h&&!!h.once);var y,g=Zone.current,m=C[p];if(m)y=m[f?Z:z];else{var _=B+(p+z),b=B+(p+Z);C[p]={},C[p][z]=_,C[p][Z]=b,y=f?b:_}var T=u[y],E=!1;if(T){if(E=!0,k)for(var O=0;O<T.length;O++)if(D(T[O],s))return}else T=u[y]=[];var x,S=u.constructor[L],P=R[S];P&&(x=P[p]),x||(x=S+n+p),w.options=h,v&&(w.options.once=!1),w.target=u,w.capture=f,w.eventName=p,w.isExisting=E;var j=g.scheduleEventTask(x,s,r?I:null,o,i);return v&&(h.once=!0),j.options=h,j.target=u,j.capture=f,j.eventName=p,l&&(j.originalDelegate=s),c?T.unshift(j):T.push(j),a?u:void 0}}};return _[o]=P(T,f,r?function(e){if(!w.isExisting)return T.apply(w.target,[w.eventName,w.capture?g:v,w.options])}:function(e){return T.apply(w.target,[w.eventName,e.invoke,w.options])},S,m),b&&(_[p]=P(b,h,function(e){return b.apply(w.target,[w.eventName,e.invoke,w.options])},S,m,!0)),_[i]=function(){var t,n=this||e,r=arguments[0],o=arguments[2];t=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);var i=arguments[1];if(!i)return E.apply(this,arguments);if(!d||d(E,i,n,arguments)){var a,c=C[r];c&&(a=c[t?Z:z]);var u=a&&n[a];if(u)for(var s=0;s<u.length;s++){var l=u[s];if(D(l,i))return u.splice(s,1),l.isRemoved=!0,0===u.length&&(l.allRemoved=!0,n[a]=null),void l.zone.cancelTask(l)}}},_[a]=function(){for(var t=[],n=s(this||e,arguments[0]),r=0;r<n.length;r++){var o=n[r];t.push(o.originalDelegate?o.originalDelegate:o.callback)}return t},_[u]=function(){var t=this||e,n=arguments[0];if(n){var r=C[n];if(r){var o=t[r[z]],a=t[r[Z]];if(o){var c=M(o);for(f=0;f<c.length;f++)this[i].apply(this,[n,(s=c[f]).originalDelegate?s.originalDelegate:s.callback,s.options])}if(a)for(c=M(a),f=0;f<c.length;f++){var s;this[i].apply(this,[n,(s=c[f]).originalDelegate?s.originalDelegate:s.callback,s.options])}}}else{for(var l=Object.keys(t),f=0;f<l.length;f++){var p=q.exec(l[f]),h=p&&p[1];h&&"removeListener"!==h&&this[u].apply(this,[h])}this[u].apply(this,["removeListener"])}},c(_[o],T),c(_[i],E),x&&c(_[u],x),O&&c(_[a],O),!0}for(var o=n&&n.addEventListenerFnName||"addEventListener",i=n&&n.removeEventListenerFnName||"removeEventListener",a=n&&n.listenersFnName||"eventListeners",u=n&&n.removeAllFnName||"removeAllListeners",l=y(o),f="."+o+":",p="prependListener",h="."+p+":",d=function(e,t,n){if(!e.isRemoved){var r=e.callback;typeof r===F&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var o=e.options;o&&"object"==typeof o&&o.once&&t[i].apply(t,[n.type,e.originalDelegate?e.originalDelegate:e.callback,o])}},v=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[C[t.type][z]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[N]);i++)d(o[i],n,t)}},g=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[C[t.type][Z]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[N]);i++)d(o[i],n,t)}},k=[],m=0;m<t.length;m++)k[m]=r(t[m],n);return k}function s(e,t){var n=[];for(var r in e){var o=q.exec(r),i=o&&o[1];if(i&&(!t||i===t)){var a=e[r];if(a)for(var c=0;c<a.length;c++)n.push(a[c])}}return n}function l(e,t,n,r){function o(t){var n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{typeof n.handleId===l?delete s[n.handleId]:n.handleId&&(n.handleId[W]=null)}},n.handleId=c.apply(e,n.args),t}function i(e){return u(e.data.handleId)}var c=null,u=null;n+=r;var s={},l="number";c=a(e,t+=r,function(n){return function(a,c){if("function"==typeof c[0]){var u=Zone.current.scheduleMacroTask(t,c[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?c[1]||0:null,args:c},o,i);if(!u)return u;var f=u.data.handleId;return typeof f===l?s[f]=u:f&&(f[W]=u),f&&f.ref&&f.unref&&"function"==typeof f.ref&&"function"==typeof f.unref&&(u.ref=f.ref.bind(f),u.unref=f.unref.bind(f)),typeof f===l||f?f:u}return n.apply(e,c)}}),u=a(e,n,function(t){return function(n,r){var o,i=r[0];typeof i===l?o=s[i]:(o=i&&i[W])||(o=i),o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&(typeof i===l?delete s[i]:i&&(i[W]=null),o.zone.cancelTask(o)):t.apply(e,r)}})}function f(e,t){return e&&e[U]&&e[U][t]}function p(e,t,n){return n.configurable=!0,n.configurable||(e[U]||X(e,U,{writable:!0,value:{}}),e[U][t]=!0),n}function h(e,t,n,r){try{return X(e,t,n)}catch(i){if(!n.configurable)throw i;typeof r==J?delete n.configurable:n.configurable=r;try{return X(e,t,n)}catch(r){var o=null;try{o=JSON.stringify(n)}catch(e){o=o.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+o+"' on object '"+e+"' and got error, giving up: "+r)}}}function d(e,t,n,r){o(e,function(e,t,n){if(!n)return t;var r=n.filter(function(t){return t.target===e});if(!r||0===r.length)return t;var o=r[0].ignoreProperties;return t.filter(function(e){return-1===o.indexOf(e)})}(e,t,n),r)}!function(e){function t(e){c&&c.mark&&c.mark(e)}function n(e,t){c&&c.measure&&c.measure(e,t)}function r(t){0===Z&&0===y.length&&(s||e[d]&&(s=e[d].resolve(0)),s?s[v](o):e[h](o,0)),t&&y.push(t)}function o(){if(!g){for(g=!0;y.length;){var e=y;y=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(e){P.onUnhandledError(e)}}}a("ignoreConsoleErrorUncaughtError"),P.microtaskDrainDone(),g=!1}}function i(){}function a(e){return"__zone_symbol__"+e}var c=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var u=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==D.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(r,"current",{get:function(){return j.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return M},enumerable:!0,configurable:!0}),r.__load_patch=function(o,i){if(D.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!e["__Zone_disable_"+o]){var a="Zone:"+o;t(a),D[o]=i(e,r,P),n(a,a)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{j=j.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{j=j.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");if(e.state!==m||e.type!==S){var r=e.state!=w;r&&e._transitionTo(w,b),e.runCount++;var o=M;M=e,j={parent:j,zone:this};try{e.type==x&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{e.state!==m&&e.state!==E&&(e.type==S||e.data&&e.data.isPeriodic?r&&e._transitionTo(b,w):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(m,w,m))),j=j.parent,M=o}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,m);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(E,_,m),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(b,_),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(O,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new p(x,e,t,n,r,o))},r.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new p(S,e,t,n,r,o))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");e._transitionTo(T,b,w);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(m,T),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();u.__symbol__=a;var s,l={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,i){return e.invokeTask(n,r,o,i)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},f=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask;(r||t&&t._hasTaskZS)&&(this._hasTaskZS=r?n:l,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=l,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=l,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=l,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new u(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,o):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t))||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=O)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],o=n[e]=r+t;if(o<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=o||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})},e}(),p=function(){function t(n,r,o,i,a,c){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=c,this.callback=o;var u=this;this.invoke=n===S&&i&&i.isUsingGlobalCallback?t.invokeTask:function(){return t.invokeTask.apply(e,[u,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),Z++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==Z&&o(),Z--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(m,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==m&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),h=a("setTimeout"),d=a("Promise"),v=a("then"),y=[],g=!1,k={name:"NO ZONE"},m="notScheduled",_="scheduling",b="scheduled",w="running",T="canceling",E="unknown",O="microTask",x="macroTask",S="eventTask",D={},P={symbol:a,currentZoneFrame:function(){return j},onUnhandledError:i,microtaskDrainDone:i,scheduleMicroTask:r,showUncaughtError:function(){return!u[a("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:i,patchMethod:function(){return i},setNativePromise:function(e){s=e.resolve(0)}},j={parent:null,zone:new u(null,null)},M=null,Z=0;n("Zone","Zone"),e.Zone=u}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||e);var v=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}};Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){return e&&e.then}function o(e){return e}function i(e){return j.reject(e)}function a(e,t){return function(n){try{c(e,t,n)}catch(t){c(e,!1,t)}}}function c(e,r,o){var i=E();if(e===o)throw new TypeError(O);if(e[g]===_){var l=null;try{typeof o!==x&&typeof o!==S||(l=o&&o.then)}catch(t){return i(function(){c(e,!1,t)})(),e}if(r!==w&&o instanceof j&&o.hasOwnProperty(g)&&o.hasOwnProperty(k)&&o[g]!==_)u(o),c(e,o[g],o[k]);else if(r!==w&&typeof l===S)try{l.apply(o,[i(a(e,r)),i(a(e,!1))])}catch(t){i(function(){c(e,!1,t)})()}else{e[g]=r;var f=e[k];e[k]=o,r===w&&o instanceof Error&&(o[D]=t.currentTask);for(var h=0;h<f.length;)s(e,f[h++],f[h++],f[h++],f[h++]);if(0==f.length&&r==w){e[g]=T;try{throw new Error("Uncaught (in promise): "+o+(o&&o.stack?"\n"+o.stack:""))}catch(r){var d=r;d.rejection=o,d.promise=e,d.zone=t.current,d.task=t.currentTask,p.push(d),n.scheduleMicroTask()}}}}return e}function u(e){if(e[g]===T){try{var n=t[P];n&&typeof n===S&&n.apply(this,[{rejection:e[k],promise:e}])}catch(e){}e[g]=w;for(var r=0;r<p.length;r++)e===p[r].promise&&p.splice(r,1)}}function s(e,t,n,r,a){u(e);var s=e[g]?typeof r===S?r:o:typeof a===S?a:i;t.scheduleMicroTask(m,function(){try{c(n,!0,t.run(s,void 0,[e[k]]))}catch(e){c(n,!1,e)}})}function l(e){var t=e.prototype,n=t.then;t[d]=n;var r=Object.getOwnPropertyDescriptor(e.prototype,"then");r&&!1===r.writable&&r.configurable&&Object.defineProperty(e.prototype,"then",{writable:!0}),e.prototype.then=function(e,t){var r=this;return new j(function(e,t){n.call(r,e,t)}).then(e,t)},e[I]=!0}var f=n.symbol,p=[],h=f("Promise"),d=f("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;p.length;)for(var e=function(){var e=p.shift();try{e.zone.runGuarded(function(){throw e})}catch(e){!function(e){n.onUnhandledError(e);try{var r=t[y];r&&"function"==typeof r&&r.apply(this,[e])}catch(e){}}(e)}};p.length;)e()};var y=f("unhandledPromiseRejectionHandler"),g=f("state"),k=f("value"),m="Promise.then",_=null,b=!0,w=!1,T=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},O="Promise resolved with itself",x="object",S="function",D=f("currentTask"),P=f("rejectionHandledHandler"),j=function(){function e(t){if(!(this instanceof e))throw new Error("Must be an instanceof Promise.");this[g]=_,this[k]=[];try{t&&t(a(this,b),a(this,w))}catch(e){c(this,!1,e)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return c(new this(null),b,e)},e.reject=function(e){return c(new this(null),w,e)},e.race=function(e){function t(e){a&&(a=o(e))}function n(e){a&&(a=i(e))}var o,i,a=new this(function(e,t){n=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}([e,t],2),o=n[0],i=n[1];var n});try{for(var c=v(e),u=c.next();!u.done;u=c.next()){var s=u.value;r(s)||(s=this.resolve(s)),s.then(t,n)}}catch(e){l={error:e}}finally{try{u&&!u.done&&(f=c.return)&&f.call(c)}finally{if(l)throw l.error}}return a;var l,f},e.all=function(e){var t,n,o=new this(function(e,r){t=e,n=r}),i=0,a=[];try{for(var c=v(e),u=c.next();!u.done;u=c.next()){var s=u.value;r(s)||(s=this.resolve(s)),s.then(function(e){return function(n){a[e]=n,--i||t(a)}}(i),n),i++}}catch(e){l={error:e}}finally{try{u&&!u.done&&(f=c.return)&&f.call(c)}finally{if(l)throw l.error}}return i||t(a),o;var l,f},e.prototype.then=function(e,n){var r=new this.constructor(null),o=t.current;return this[g]==_?this[k].push(o,r,e,n):s(this,o,r,e,n),r},e.prototype.catch=function(e){return this.then(null,e)},e}();j.resolve=j.resolve,j.reject=j.reject,j.race=j.race,j.all=j.all;var M=e[h]=e.Promise,Z=t.__symbol__("ZoneAwarePromise"),z=Object.getOwnPropertyDescriptor(e,"Promise");z&&!z.configurable||(z&&delete z.writable,z&&delete z.value,z||(z={configurable:!0,enumerable:!0}),z.get=function(){return e[Z]?e[Z]:e[h]},z.set=function(t){t===j?e[Z]=t:(e[h]=t,t.prototype[d]||l(t),n.setNativePromise(t))},Object.defineProperty(e,"Promise",z)),e.Promise=j;var I=f("thenPatched");if(M){l(M);var C=e.fetch;typeof C==S&&(e.fetch=function(e){return function(){var t=e.apply(this,arguments);if(t instanceof j)return t;var n=t.constructor;return n[I]||l(n),t}}(C))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=p,j});var y=Zone.__symbol__,g="object"==typeof window&&window||"object"==typeof self&&self||e,k="function",m="undefined",_="removeAttribute",b="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,w=!("nw"in g)&&void 0!==g.process&&"[object process]"==={}.toString.call(g.process),T=!w&&!b&&!("undefined"==typeof window||!window.HTMLElement),E=void 0!==g.process&&"[object process]"==={}.toString.call(g.process)&&!b&&!("undefined"==typeof window||!window.HTMLElement),O={},x=function(e){if(e=e||g.event){var t=O[e.type];t||(t=O[e.type]=y("ON_PROPERTY"+e.type));var n=(this||e.target||g)[t],r=n&&n.apply(this,arguments);return void 0==r||r||e.preventDefault(),r}},S=y("originalInstance"),D=!1,P=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString,o=y("OriginalDelegate"),i=y("Promise"),a=y("Error");Function.prototype.toString=function(){if("function"==typeof this){var t=this[o];if(t)return"function"==typeof t?r.apply(this[o],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[i];if(n)return r.apply(n,arguments)}if(this===Error){var c=e[a];if(c)return r.apply(c,arguments)}}return r.apply(this,arguments)};var c=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":c.apply(this,arguments)}});var j=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},M=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(j(arguments[t]));return e},Z="true",z="false",I={isUsingGlobalCallback:!0},C={},R={},L="name",H="function",F="object",B="__zone_symbol__",q=/^__zone_symbol__(\w+)(true|false)$/,N="__zone_symbol__propagationStopped",W=y("zoneTask"),X=Object[y("defineProperty")]=Object.defineProperty,A=Object[y("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,G=Object.create,U=y("unconfigurables"),J="undefined",V=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],Q=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],K=["load"],Y=["blur","error","focus","load","resize","scroll","messageerror"],$=["bounce","finish","start"],ee=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],te=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ne=["close","error","open","message"],re=["error","message"],oe=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],V,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]),ie=y("unbound");Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=o,n.patchMethod=a}),Zone.__load_patch("timers",function(e,t,n){l(e,"set","clear","Timeout"),l(e,"set","clear","Interval"),l(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e,t,n){l(e,"request","cancel","AnimationFrame"),l(e,"mozRequest","mozCancel","AnimationFrame"),l(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],o=0;o<r.length;o++)a(e,r[o],function(n,r,o){return function(r,i){return t.current.run(n,e,i,o)}})}),Zone.__load_patch("EventTarget",function(e,t,n){(function(e,t){!function(n,r){var o=e.Event;o&&o.prototype&&t.patchMethod(o.prototype,"stopImmediatePropagation",function(e){return function(e,t){e[N]=!0}})}()})(e,n),function(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o=[],i=e.wtf,a=n.split(",");i?o=a.map(function(e){return"HTML"+e+"Element"}).concat(r):e.EventTarget?o.push("EventTarget"):o=r;for(var c=e.__Zone_disable_IE_check||!1,s=e.__Zone_enable_cross_context_check||!1,l=function(){if(D)return P;D=!0;try{var e=window.navigator.userAgent;return e.indexOf("MSIE "),-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(P=!0),P}catch(e){}}(),f="[object FunctionWrapper]",p="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",h=0;h<oe.length;h++){var d=B+((m=oe[h])+z),v=B+(m+Z);C[m]={},C[m][z]=d,C[m][Z]=v}for(h=0;h<n.length;h++)for(var y=a[h],g=R[y]={},k=0;k<oe.length;k++){var m;g[m=oe[k]]=y+".addEventListener:"+m}var _=[];for(h=0;h<o.length;h++){var b=e[o[h]];_.push(b&&b.prototype)}u(e,_,{validateHandler:function(e,t,n,r){if(!c&&l)if(s)try{if((o=t.toString())===f||o==p)return e.apply(n,r),!1}catch(t){return e.apply(n,r),!1}else{var o;if((o=t.toString())===f||o==p)return e.apply(n,r),!1}else if(s)try{t.toString()}catch(t){return e.apply(n,r),!1}return!0}}),t.patchEventTarget=u}(e,n);var r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,[r.prototype]),i("MutationObserver"),i("WebKitMutationObserver"),i("IntersectionObserver"),i("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){(function(e,t){if(!w||E){var n="undefined"!=typeof WebSocket;if(function(){if((T||E)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=!!(o=new XMLHttpRequest).onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),n}var r=y("fakeonreadystatechange");Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[r]},set:function(e){this[r]=e}});var o,i=function(){};(o=new XMLHttpRequest).onreadystatechange=i;n=o[r]===i;return o.onreadystatechange=null,n}()){var r=t.__Zone_ignore_on_properties;if(T){d(window,oe.concat(["messageerror"]),r,Object.getPrototypeOf(window)),d(Document.prototype,oe,r),void 0!==window.SVGElement&&d(window.SVGElement.prototype,oe,r),d(Element.prototype,oe,r),d(HTMLElement.prototype,oe,r),d(HTMLMediaElement.prototype,Q,r),d(HTMLFrameSetElement.prototype,V.concat(Y),r),d(HTMLBodyElement.prototype,V.concat(Y),r),d(HTMLFrameElement.prototype,K,r),d(HTMLIFrameElement.prototype,K,r);var a=window.HTMLMarqueeElement;a&&d(a.prototype,$,r);var c=window.Worker;c&&d(c.prototype,re,r)}d(XMLHttpRequest.prototype,ee,r);var s=t.XMLHttpRequestEventTarget;s&&d(s&&s.prototype,ee,r),"undefined"!=typeof IDBIndex&&(d(IDBIndex.prototype,te,r),d(IDBRequest.prototype,te,r),d(IDBOpenDBRequest.prototype,te,r),d(IDBDatabase.prototype,te,r),d(IDBTransaction.prototype,te,r),d(IDBCursor.prototype,te,r)),n&&d(WebSocket.prototype,ne,r)}else!function(){for(var e=function(e){var t=oe[e],n="on"+t;self.addEventListener(t,function(e){var t,r,o=e.target;for(r=o?o.constructor.name+"."+n:"unknown."+n;o;)o[n]&&!o[n][ie]&&((t=Zone.current.wrap(o[n],r))[ie]=o[n],o[n]=t),o=o.parentElement},!0)},t=0;t<oe.length;t++)e(t)}(),i("XMLHttpRequest"),n&&function(e,t){var n=t.WebSocket;t.EventTarget||u(t,[n.prototype]),t.WebSocket=function(e,t){var r,i,a=arguments.length>1?new n(e,t):new n(e),c=Object.getOwnPropertyDescriptor(a,"onmessage");return c&&!1===c.configurable?(r=Object.create(a),i=a,["addEventListener","removeEventListener","send","close"].forEach(function(e){r[e]=function(){var t=Array.prototype.slice.call(arguments);if("addEventListener"===e||"removeEventListener"===e){var n=t.length>0?t[0]:void 0;if(n){var o=Zone.__symbol__("ON_PROPERTY"+n);a[o]=r[o]}}return a[e].apply(a,t)}})):r=a,o(r,["close","error","message","open"],i),r};var r=t.WebSocket;for(var i in n)r[i]=n[i]}(0,t)}})(0,e),Object.defineProperty=function(e,t,n){if(f(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=p(e,t,n)),h(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=p(e,n,t[n])}),G(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=A(e,t);return f(e,t)&&(n.configurable=!1),n},function(t){if((T||E)&&"registerElement"in e.document){var n=document.registerElement,r=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,t){return t&&t.prototype&&r.forEach(function(e){var n="Document.registerElement::"+e;if(t.prototype.hasOwnProperty(e)){var r=Object.getOwnPropertyDescriptor(t.prototype,e);r&&r.value?(r.value=Zone.current.wrap(r.value,n),function(t,n,r){var o=r.configurable;h(t,e,r=p(t,e,r),o)}(t.prototype,0,r)):t.prototype[e]=Zone.current.wrap(t.prototype[e],n)}else t.prototype[e]&&(t.prototype[e]=Zone.current.wrap(t.prototype[e],n))}),n.apply(document,[e,t])},c(document.registerElement,n)}}()}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;void 0!==r&&r.prototype&&r.prototype.toBlob&&function(e,t,n){function o(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},i.apply(t.target,t.args),e}var i=null;i=a(r.prototype,"toBlob",function(e){return function(t,n){var r={name:"HTMLCanvasElement.toBlob",target:t,callbackIndex:0,args:n};return r.callbackIndex>=0&&"function"==typeof n[r.callbackIndex]?Zone.current.scheduleMacroTask(r.name,n[r.callbackIndex],r,o,null):e.apply(t,n)}})}()}),Zone.__load_patch("XHR",function(e,t,n){!function(e){function n(e){XMLHttpRequest[c]=!1;var t=e.data,n=t.target,o=n[i];h||(h=n[f],d=n[p]),o&&d.apply(n,[g,o]);var a=n[i]=function(){n.readyState===n.DONE&&!t.aborted&&XMLHttpRequest[c]&&e.state===k&&e.invoke()};return h.apply(n,[g,a]),n[r]||(n[r]=e),_.apply(n,t.args),XMLHttpRequest[c]=!0,e}function s(){}function l(e){var t=e.data;return t.aborted=!0,b.apply(t.target,t.args)}var f=y("addEventListener"),p=y("removeEventListener"),h=XMLHttpRequest.prototype[f],d=XMLHttpRequest.prototype[p];if(!h){var v=e.XMLHttpRequestEventTarget;v&&(h=v.prototype[f],d=v.prototype[p])}var g="readystatechange",k="scheduled",m=a(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[o]=0==t[2],e[u]=t[1],m.apply(e,t)}}),_=a(e.XMLHttpRequest.prototype,"send",function(){return function(e,r){var i=t.current;return e[o]?_.apply(e,r):i.scheduleMacroTask("XMLHttpRequest.send",s,{target:e,url:e[u],isPeriodic:!1,delay:null,args:r,aborted:!1},n,l)}}),b=a(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var n=e[r];if(n&&"string"==typeof n.type){if(null==n.cancelFn||n.data&&n.data.aborted)return;n.zone.cancelTask(n)}}})}(e);var r=y("xhrTask"),o=y("xhrSync"),i=y("xhrListener"),c=y("xhrScheduled"),u=y("xhrURL")}),Zone.__load_patch("geolocation",function(e,r,o){e.navigator&&e.navigator.geolocation&&function(e,r){for(var o=e.constructor.name,i=function(i){var a=r[i],u=e[a];if(u){if(!n(Object.getOwnPropertyDescriptor(e,a)))return"continue";e[a]=function(e){var n=function(){return e.apply(this,t(arguments,o+"."+a))};return c(n,e),n}(u)}},a=0;a<r.length;a++)i(a)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){s(e,t).forEach(function(r){var o=e.PromiseRejectionEvent;if(o){var i=new o(t,{promise:n.promise,reason:n.rejection});r.invoke(i)}})}}e.PromiseRejectionEvent&&(t[y("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[y("rejectionHandledHandler")]=r("rejectionhandled"))})}()}).call(t,n("fRUx"))},ewdp:function(e,t,n){var r=n("tose"),o=n("+pQw"),i=n("2Fuj");e.exports=n("V+0c")?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),c=a.length,u=0;c>u;)r.f(e,n=a[u++],t[n]);return e}},fC8q:function(e,t,n){var r=n("dXJ/"),o=n("3r0D")("iterator"),i=n("lexG");e.exports=n("b4gG").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},fHxy:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.key,a=r.set;r.exp({defineMetadata:function(e,t,n,r){a(e,t,o(n),i(r))}})},fRUx:function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},gBtn:function(e,t,n){var r=n("ZI9W"),o=n("CDXM"),i=n("Iclu")("metadata"),a=i.store||(i.store=new(n("QZhw"))),c=function(e,t,n){var o=a.get(e);if(!o){if(!n)return;a.set(e,o=new r)}var i=o.get(t);if(!i){if(!n)return;o.set(t,i=new r)}return i};e.exports={store:a,map:c,has:function(e,t,n){var r=c(t,n,!1);return void 0!==r&&r.has(e)},get:function(e,t,n){var r=c(t,n,!1);return void 0===r?void 0:r.get(e)},set:function(e,t,n,r){c(n,r,!0).set(e,t)},keys:function(e,t){var n=c(e,t,!1),r=[];return n&&n.forEach(function(e,t){r.push(t)}),r},key:function(e){return void 0===e||"symbol"==typeof e?e:String(e)},exp:function(e){o(o.S,"Reflect",e)}}},gNkH:function(e,t,n){e.exports=!n("V+0c")&&!n("umMR")(function(){return 7!=Object.defineProperty(n("BQSv")("div"),"a",{get:function(){return 7}}).a})},gxdV:function(e,t,n){var r=n("tose"),o=n("piOq");e.exports=n("V+0c")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},lexG:function(e,t){e.exports={}},lfBE:function(e,t,n){var r=n("ptrv"),o=n("gxdV"),i=n("rMsi"),a=n("c09d")("src"),c=Function.toString,u=(""+c).split("toString");n("b4gG").inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,c){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(s&&(i(n,a)||o(n,a,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:c?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||c.call(this)})},lzDK:function(e,t){t.f=Object.getOwnPropertySymbols},ncNB:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.get,a=r.key;r.exp({getOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},"p/bR":function(e,t,n){var r=n("pa70"),o=n("ULWX"),i=n("KpI+"),a=n("+pQw"),c=n("rppw"),u=n("fC8q"),s={},l={};(t=e.exports=function(e,t,n,f,p){var h,d,v,y,g=p?function(){return e}:u(e),k=r(n,f,t?2:1),m=0;if("function"!=typeof g)throw TypeError(e+" is not iterable!");if(i(g)){for(h=c(e.length);h>m;m++)if((y=t?k(a(d=e[m])[0],d[1]):k(e[m]))===s||y===l)return y}else for(v=g.call(e);!(d=v.next()).done;)if((y=o(v,k,d.value,t))===s||y===l)return y}).BREAK=s,t.RETURN=l},pBmS:function(e,t,n){var r=n("lfBE");e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},pa70:function(e,t,n){var r=n("uNkO");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},piOq:function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},ptrv:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},rIdM:function(e,t,n){"use strict";var r=n("2Fuj"),o=n("lzDK"),i=n("9e9+"),a=n("RT4T"),c=n("Wo2w"),u=Object.assign;e.exports=!u||n("umMR")(function(){var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach(function(e){t[e]=e}),7!=u({},e)[n]||"abcdefghijklmnopqrst"!=Object.keys(u({},t)).join("")})?function(e,t){for(var n=a(e),u=arguments.length,s=1,l=o.f,f=i.f;u>s;)for(var p,h=c(arguments[s++]),d=l?r(h).concat(l(h)):r(h),v=d.length,y=0;v>y;)f.call(h,p=d[y++])&&(n[p]=h[p]);return n}:u},rKhO:function(e,t,n){var r=n("VceJ");e.exports=Array.isArray||function(e){return"Array"==r(e)}},rMsi:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},rppw:function(e,t,n){var r=n("9wYb"),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},soMw:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(e){return i(o(e),arguments.length<2?void 0:a(arguments[1]))}})},t6ta:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("uNkO"),a=r.key,c=r.set;r.exp({metadata:function(e,t){return function(n,r){c(e,t,(void 0!==r?o:i)(n),a(r))}}})},tose:function(e,t,n){var r=n("+pQw"),o=n("gNkH"),i=n("A1WY"),a=Object.defineProperty;t.f=n("V+0c")?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},uNkO:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},umMR:function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},vyV2:function(e,t,n){var r=n("+GRi"),o=n("rppw"),i=n("KM3d");e.exports=function(e){return function(t,n,a){var c,u=r(t),s=o(u.length),l=i(a,s);if(e&&n!=n){for(;s>l;)if((c=u[l++])!=c)return!0}else for(;s>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},"w/BM":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},xI8H:function(e,t,n){var r=n("c09d")("meta"),o=n("JXkd"),i=n("rMsi"),a=n("tose").f,c=0,u=Object.isExtensible||function(){return!0},s=!n("umMR")(function(){return u(Object.preventExtensions({}))}),l=function(e){a(e,r,{value:{i:"O"+ ++c,w:{}}})},f=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[r].i},getWeak:function(e,t){if(!i(e,r)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[r].w},onFreeze:function(e){return s&&f.NEED&&u(e)&&!i(e,r)&&l(e),e}}},yIWP:function(e,t,n){var r=n("Iclu")("keys"),o=n("c09d");e.exports=function(e){return r[e]||(r[e]=o(e))}}},[1]);
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
deleted file mode 100644
index 941dfa4..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
deleted file mode 100644
index 7b25f3c..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
deleted file mode 100644
index ed55c10..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<defs >
-<font id="Roboto" horiz-adv-x="1157" ><font-face
-    font-family="Roboto"
-    units-per-em="2048"
-    panose-1="2 0 0 0 0 0 0 0 0 0"
-    ascent="1900"
-    descent="-500"
-    alphabetic="0" />
-<glyph unicode=" " horiz-adv-x="507" />
-<glyph unicode="!" horiz-adv-x="527" d="M347 411H180L167 1456H361L347 411ZM160 93Q160 138 187 168T269 199T351 169T379 93T351 19T269 -11T188 18T160 93Z" />
-<glyph unicode="&quot;" horiz-adv-x="655" d="M277 1400L247 1042H136L137 1536H277V1400ZM547 1400L517 1042H406L407 1536H547V1400Z" />
-<glyph unicode="#" horiz-adv-x="1261" d="M765 410H501L421 0H278L358 410H119V547H384L453 901H195V1040H480L562 1456H705L623 1040H887L969 1456H1113L1031 1040H1235V901H1004L935 547H1160V410H909L829 0H685L765 410ZM527 547H791L860 901H596L527 547Z" />
-<glyph unicode="$" horiz-adv-x="1150" d="M856 375Q856 467 792 530T574 644Q361 709 264 813T166 1079Q166 1243 261 1348T524 1473V1692H673V1472Q841 1449 934 1331T1028 1008H844Q844 1149 777 1232T596 1315Q477 1315 414 1254T351 1082Q351 980 417 920T636
-810T874 701T1000 562T1041 377Q1041 208 940 105T655 -17V-208H507V-17Q321 0 216 115T110 429H295Q295 290 368 215T575 140Q706 140 781 203T856 375Z" />
-<glyph unicode="%" horiz-adv-x="1500" d="M105 1176Q105 1307 188 1392T403 1477Q536 1477 618 1392T701 1170V1099Q701 967 618 884T405 800Q275 800 190 883T105 1106V1176ZM243 1099Q243 1021 287 971T405 920Q476 920 519 969T563 1103V1176Q563 1254 520
-1305T403 1356T286 1305T243 1172V1099ZM814 357Q814 488 897 572T1112 657T1327 573T1411 350V279Q1411 148 1328 64T1114 -21T899 62T814 285V357ZM952 279Q952 200 996 150T1114 99Q1186 99 1229 148T1272 283V357Q1272 436 1229 486T1112 536Q1041 536 997
-487T952 353V279ZM447 110L342 176L1053 1314L1158 1248L447 110Z" />
-<glyph unicode="&amp;" horiz-adv-x="1273" d="M101 391Q101 496 159 584T383 789Q286 907 253 979T220 1122Q220 1288 318 1382T584 1476Q734 1476 832 1389T930 1168Q930 1080 886 1006T730 849L623 770L947 383Q1015 513 1015 672H1182Q1182 417 1059 249L1267
-0H1045L948 115Q874 49 775 15T572 -20Q359 -20 230 93T101 391ZM572 131Q719 131 841 243L486 668L453 644Q286 521 286 391Q286 273 362 202T572 131ZM405 1128Q405 1032 523 888L641 971Q709 1019 734 1062T759 1168Q759 1235 709 1279T583 1324Q501 1324 453
-1269T405 1128Z" />
-<glyph unicode="&apos;" horiz-adv-x="357" d="M253 1425L232 1057H103L104 1536H253V1425Z" />
-<glyph unicode="(" horiz-adv-x="700" d="M133 591Q133 817 193 1025T374 1403T623 1643L661 1521Q515 1409 422 1179T319 664L318 579Q318 193 459 -91Q544 -261 661 -357L623 -470Q490 -396 369 -222Q133 118 133 591Z" />
-<glyph unicode=")" horiz-adv-x="712" d="M567 581Q567 358 509 154T330 -224T77 -470L38 -357Q192 -239 285 9T381 561V593Q381 803 337 983T215 1307T38 1530L77 1643Q209 1570 328 1399T507 1022T567 581Z" />
-<glyph unicode="*" horiz-adv-x="882" d="M330 983L28 1073L74 1224L376 1112L367 1456H520L510 1107L807 1217L853 1065L546 974L744 703L620 609L434 897L254 616L129 707L330 983Z" />
-<glyph unicode="+" horiz-adv-x="1161" d="M670 781H1076V606H670V146H484V606H78V781H484V1206H670V781Z" />
-<glyph unicode="," horiz-adv-x="402" d="M134 -290L29 -218Q123 -87 127 52V219H308V74Q308 -27 259 -128T134 -290Z" />
-<glyph unicode="-" horiz-adv-x="565" d="M525 543H37V694H525V543Z" />
-<glyph unicode="." horiz-adv-x="539" d="M144 97Q144 145 172 177T258 209T344 177T374 97Q374 51 345 20T258 -11T173 20T144 97Z" />
-<glyph unicode="/" horiz-adv-x="844" d="M177 -125H18L626 1456H784L177 -125Z" />
-<glyph unicode="0" horiz-adv-x="1150" d="M1034 621Q1034 296 923 138T576 -20Q343 -20 231 134T115 596V843Q115 1164 226 1320T574 1476Q809 1476 920 1326T1034 861V621ZM849 874Q849 1109 783 1216T574 1324Q432 1324 367 1217T300 888V592Q300 356 368 244T576
-131Q713 131 779 237T849 571V874Z" />
-<glyph unicode="1" horiz-adv-x="1150" d="M729 0H543V1233L170 1096V1264L700 1463H729V0Z" />
-<glyph unicode="2" horiz-adv-x="1150" d="M1075 0H121V133L625 693Q737 820 779 899T822 1064Q822 1178 753 1251T569 1324Q431 1324 355 1246T278 1027H93Q93 1228 222 1352T569 1476Q772 1476 890 1370T1008 1086Q1008 871 734 574L344 151H1075V0Z" />
-<glyph unicode="3" horiz-adv-x="1150" d="M390 818H529Q660 820 735 887T810 1068Q810 1324 555 1324Q435 1324 364 1256T292 1074H107Q107 1247 233 1361T555 1476Q761 1476 878 1367T995 1064Q995 969 934 880T766 747Q886 709 951 621T1017 406Q1017 210 889
-95T556 -20T223 91T94 384H280Q280 269 355 200T556 131Q690 131 761 201T832 402Q832 529 754 597T529 667H390V818Z" />
-<glyph unicode="4" horiz-adv-x="1150" d="M902 489H1104V338H902V0H716V338H53V447L705 1456H902V489ZM263 489H716V1203L694 1163L263 489Z" />
-<glyph unicode="5" horiz-adv-x="1150" d="M206 730L280 1456H1026V1285H437L393 888Q500 951 636 951Q835 951 952 820T1069 464Q1069 239 948 110T608 -20Q415 -20 293 87T154 383H329Q346 258 418 195T608 131Q737 131 810 219T884 462Q884 608 805 696T593
-785Q472 785 403 732L354 692L206 730Z" />
-<glyph unicode="6" horiz-adv-x="1150" d="M847 1457V1300H813Q597 1296 469 1172T321 823Q436 955 635 955Q825 955 938 821T1052 475Q1052 250 930 115T601 -20Q392 -20 262 140T132 554V625Q132 1027 303 1239T814 1457H847ZM604 801Q509 801 429 744T318 601V533Q318
-353 399 243T601 133Q726 133 797 225T869 466Q869 616 797 708T604 801Z" />
-<glyph unicode="7" horiz-adv-x="1150" d="M1061 1352L458 0H264L865 1304H77V1456H1061V1352Z" />
-<glyph unicode="8" horiz-adv-x="1150" d="M1004 1076Q1004 967 947 882T791 749Q905 700 971 606T1038 393Q1038 204 911 92T575 -20Q365 -20 239 92T112 393Q112 511 176 606T355 750Q258 798 202 883T146 1076Q146 1260 264 1368T575 1476Q767 1476 885 1368T1004
-1076ZM853 397Q853 519 776 596T573 673T373 597T297 397T370 202T575 131Q705 131 779 202T853 397ZM575 1324Q466 1324 399 1257T331 1073Q331 962 397 894T575 825T752 893T819 1073T750 1254T575 1324Z" />
-<glyph unicode="9" horiz-adv-x="1150" d="M830 640Q772 571 692 529T515 487Q389 487 296 549T151 723T100 972Q100 1118 155 1235T313 1414T551 1476Q767 1476 891 1315T1016 874V820Q1016 395 848 200T341 -1H305V155H344Q573 159 696 274T830 640ZM545 640Q638
-640 716 697T831 838V912Q831 1094 752 1208T552 1322Q430 1322 356 1229T282 982Q282 833 353 737T545 640Z" />
-<glyph unicode=":" horiz-adv-x="496" d="M390 97Q390 145 418 177T504 209T590 177T620 97Q620 51 591 20T504 -11T419 20T390 97ZM135 980Q135 1028 163 1060T249 1092T335 1060T365 980Q365 934 336 903T249 872T164 903T135 980Z" />
-<glyph unicode=";" horiz-adv-x="433" d="M111 980Q111 1028 139 1060T225 1092T311 1060T341 980Q341 934 312 903T225 872T140 903T111 980ZM146 -290L41 -218Q135 -87 139 52V219H320V74Q320 -27 271 -128T146 -290Z" />
-<glyph unicode="&lt;" horiz-adv-x="1041" d="M264 644L890 391V195L72 574V720L890 1098V902L264 644Z" />
-<glyph unicode="=" horiz-adv-x="1124" d="M986 814H152V975H986V814ZM986 399H152V559H986V399Z" />
-<glyph unicode="&gt;" horiz-adv-x="1070" d="M795 650L134 909V1099L988 721V575L134 196V388L795 650Z" />
-<glyph unicode="?" horiz-adv-x="967" d="M357 410Q359 529 384 598T486 751L617 886Q701 981 701 1090Q701 1195 646 1254T486 1314Q384 1314 322 1260T260 1115H75Q77 1277 190 1376T486 1476Q675 1476 780 1375T886 1096Q886 921 724 751L615 643Q542 562 542
-410H357ZM349 93Q349 138 376 168T458 199T540 169T568 93T540 19T458 -11T377 18T349 93Z" />
-<glyph unicode="@" horiz-adv-x="1839" d="M1738 502Q1726 260 1618 120T1329 -20Q1142 -20 1089 148Q1035 63 966 22T822 -20Q680 -20 607 96T553 417Q568 582 628 711T784 915T985 989Q1066 989 1130 968T1274 883L1222 329Q1203 98 1350 98Q1463 98 1533 210T1609
-502Q1628 891 1465 1095T967 1299Q766 1299 610 1200T364 912T263 478Q251 230 323 48T542 -231T899 -328Q989 -328 1079 -306T1230 -249L1267 -364Q1205 -403 1103 -428T895 -453Q645 -453 465 -341T196 -17T118 478Q130 753 241 972T542 1311T971 1431Q1220 1431
-1398 1319T1663 996T1738 502ZM712 417Q698 275 738 199T867 123Q927 123 982 174T1074 320L1075 329L1121 832Q1065 861 1001 861Q884 861 808 742T712 417Z" />
-<glyph unicode="A" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538Z" />
-<glyph unicode="B" horiz-adv-x="1275" d="M169 0V1456H645Q882 1456 1001 1358T1121 1068Q1121 966 1063 888T905 766Q1023 733 1091 641T1160 420Q1160 224 1033 112T674 0H169ZM361 681V157H678Q812 157 889 226T967 418Q967 681 681 681H361ZM361 835H651Q777
-835 852 898T928 1069Q928 1189 858 1243T645 1298H361V835Z" />
-<glyph unicode="C" horiz-adv-x="1333" d="M1240 462Q1213 231 1070 106T688 -20Q430 -20 275 165T119 660V800Q119 1003 191 1157T397 1393T705 1476Q937 1476 1077 1347T1240 988H1047Q1022 1162 939 1240T705 1318Q521 1318 417 1182T312 795V654Q312 417 411
-277T688 137Q848 137 933 209T1047 462H1240Z" />
-<glyph unicode="D" horiz-adv-x="1343" d="M169 0V1456H580Q770 1456 916 1372T1141 1133T1222 777V684Q1222 478 1143 323T916 85T572 0H169ZM361 1298V157H563Q785 157 908 295T1032 688V773Q1032 1021 916 1158T585 1298H361Z" />
-<glyph unicode="E" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673Z" />
-<glyph unicode="F" horiz-adv-x="1132" d="M972 643H361V0H169V1456H1071V1298H361V800H972V643Z" />
-<glyph unicode="G" horiz-adv-x="1395" d="M1244 191Q1170 85 1038 33T729 -20Q551 -20 413 63T200 301T122 658V785Q122 1114 275 1295T707 1476Q935 1476 1074 1360T1244 1029H1052Q998 1318 708 1318Q515 1318 416 1183T315 790V671Q315 426 427 282T730 137Q838
-137 919 161T1053 242V569H716V725H1244V191Z" />
-<glyph unicode="H" horiz-adv-x="1460" d="M1288 0H1095V673H361V0H169V1456H361V830H1095V1456H1288V0Z" />
-<glyph unicode="I" horiz-adv-x="557" d="M375 0H183V1456H375V0Z" />
-<glyph unicode="J" horiz-adv-x="1130" d="M779 1456H972V425Q972 216 847 98T512 -20Q295 -20 174 91T53 402H245Q245 277 313 207T512 137Q631 137 704 212T779 422V1456Z" />
-<glyph unicode="K" horiz-adv-x="1284" d="M539 677L361 492V0H169V1456H361V736L1008 1456H1240L667 813L1285 0H1055L539 677Z" />
-<glyph unicode="L" horiz-adv-x="1102" d="M362 157H1052V0H169V1456H362V157Z" />
-<glyph unicode="M" horiz-adv-x="1788" d="M417 1456L893 268L1369 1456H1618V0H1426V567L1444 1179L966 0H819L342 1176L361 567V0H169V1456H417Z" />
-<glyph unicode="N" horiz-adv-x="1460" d="M1288 0H1095L362 1122V0H169V1456H362L1097 329V1456H1288V0Z" />
-<glyph unicode="O" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521 1311
-417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775Z" />
-<glyph unicode="P" horiz-adv-x="1292" d="M361 570V0H169V1456H706Q945 1456 1080 1334T1216 1011Q1216 799 1084 685T704 570H361ZM361 727H706Q860 727 942 799T1024 1009Q1024 1139 942 1217T717 1298H361V727Z" />
-<glyph unicode="Q" horiz-adv-x="1408" d="M1281 681Q1281 470 1214 318T1026 79L1286 -125L1155 -246L848 -2Q776 -20 696 -20Q524 -20 391 64T185 305T109 668V773Q109 983 182 1144T388 1390T694 1476Q870 1476 1003 1391T1209 1147T1281 774V681ZM1089 775Q1089
-1032 987 1171T694 1311Q513 1311 409 1173T301 788V681Q301 431 405 287T696 143T984 278T1089 667V775Z" />
-<glyph unicode="R" horiz-adv-x="1261" d="M703 589H361V0H168V1456H650Q896 1456 1028 1344T1161 1018Q1161 882 1088 781T883 630L1225 12V0H1019L703 589ZM361 746H656Q799 746 883 820T968 1018Q968 1153 888 1225T655 1298H361V746Z" />
-<glyph unicode="S" horiz-adv-x="1215" d="M598 649Q351 720 239 823T126 1079Q126 1251 263 1363T621 1476Q771 1476 888 1418T1070 1258T1135 1035H942Q942 1167 858 1242T621 1318Q479 1318 400 1256T320 1082Q320 993 395 932T652 819T936 707T1088 563T1138
-370Q1138 193 1000 87T631 -20Q481 -20 351 37T151 195T80 422H273Q273 290 370 214T631 137Q783 137 864 199T945 368T870 533T598 649Z" />
-<glyph unicode="T" horiz-adv-x="1222" d="M1175 1298H707V0H516V1298H49V1456H1175V1298Z" />
-<glyph unicode="U" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194Z" />
-<glyph unicode="V" horiz-adv-x="1303" d="M651 255L1067 1456H1277L737 0H567L28 1456H237L651 255Z" />
-<glyph unicode="W" horiz-adv-x="1817" d="M483 459L511 267L552 440L840 1456H1002L1283 440L1323 264L1354 460L1580 1456H1773L1420 0H1245L945 1061L922 1172L899 1061L588 0H413L61 1456H253L483 459Z" />
-<glyph unicode="X" horiz-adv-x="1284" d="M644 898L993 1456H1219L759 734L1230 0H1002L644 568L284 0H57L529 734L68 1456H293L644 898Z" />
-<glyph unicode="Y" horiz-adv-x="1230" d="M613 725L993 1456H1211L709 543V0H517V543L15 1456H235L613 725Z" />
-<glyph unicode="Z" horiz-adv-x="1226" d="M313 157H1146V0H86V144L884 1298H99V1456H1114V1315L313 157Z" />
-<glyph unicode="[" horiz-adv-x="543" d="M523 1512H332V-160H523V-312H146V1664H523V1512Z" />
-<glyph unicode="\" horiz-adv-x="840" d="M40 1456H216L824 -125H648L40 1456Z" />
-<glyph unicode="]" horiz-adv-x="543" d="M9 1664H387V-312H9V-160H202V1512H9V1664Z" />
-<glyph unicode="^" horiz-adv-x="856" d="M426 1211L236 729H64L363 1456H490L788 729H617L426 1211Z" />
-<glyph unicode="_" horiz-adv-x="924" d="M920 -151H4V0H920V-151Z" />
-<glyph unicode="`" horiz-adv-x="633" d="M474 1240H315L57 1534H280L474 1240Z" />
-<glyph unicode="a" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141Z" />
-<glyph unicode="b" horiz-adv-x="1149" d="M1056 529Q1056 281 942 131T636 -20Q431 -20 319 125L310 0H140V1536H325V963Q437 1102 634 1102T943 953T1056 545V529ZM871 550Q871 739 798 842T588 945Q405 945 325 775V307Q410 137 590 137Q723 137 797 240T871 550Z" />
-<glyph unicode="c" horiz-adv-x="1072" d="M574 131Q673 131 747 191T829 341H1004Q999 248 940 164T783 30T574 -20Q353 -20 223 127T92 531V562Q92 720 150 843T316 1034T573 1102Q755 1102 875 993T1004 710H829Q821 815 750 882T573 950Q432 950 355 849T277
-555V520Q277 333 354 232T574 131Z" />
-<glyph unicode="d" horiz-adv-x="1155" d="M95 550Q95 799 213 950T522 1102Q712 1102 823 972V1536H1008V0H838L829 116Q718 -20 520 -20Q332 -20 214 134T95 536V550ZM280 529Q280 345 356 241T566 137Q742 137 823 295V792Q740 945 568 945Q432 945 356 840T280 529Z" />
-<glyph unicode="e" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378 869T284
-640H826V654Q818 795 750 872T566 950Z" />
-<glyph unicode="f" horiz-adv-x="711" d="M231 0V939H60V1082H231V1193Q231 1367 324 1462T587 1557Q651 1557 714 1540L704 1390Q657 1399 604 1399Q514 1399 465 1347T416 1196V1082H647V939H416V0H231Z" />
-<glyph unicode="g" horiz-adv-x="1149" d="M96 550Q96 803 213 952T523 1102Q721 1102 832 962L841 1082H1010V26Q1010 -184 886 -305T551 -426Q434 -426 322 -376T151 -239L247 -128Q366 -275 538 -275Q673 -275 748 -199T824 15V108Q713 -20 521 -20Q331 -20
-214 133T96 550ZM282 529Q282 346 357 242T567 137Q742 137 824 296V790Q739 945 569 945Q434 945 358 840T282 529Z" />
-<glyph unicode="h" horiz-adv-x="1128" d="M325 951Q448 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1536H325V951Z" />
-<glyph unicode="i" horiz-adv-x="497" d="M341 0H156V1082H341V0ZM141 1369Q141 1414 168 1445T250 1476T332 1445T360 1369T332 1294T250 1264T169 1294T141 1369Z" />
-<glyph unicode="j" horiz-adv-x="489" d="M331 1082V-125Q331 -437 48 -437Q-13 -437 -65 -419V-271Q-33 -279 19 -279Q81 -279 113 -246T146 -129V1082H331ZM127 1369Q127 1413 154 1444T235 1476Q289 1476 317 1445T345 1369T317 1294T235 1264T154 1294T127 1369Z" />
-<glyph unicode="k" horiz-adv-x="1038" d="M442 501L326 380V0H141V1536H326V607L425 726L762 1082H987L566 630L1036 0H819L442 501Z" />
-<glyph unicode="l" horiz-adv-x="497" d="M341 0H156V1536H341V0Z" />
-<glyph unicode="m" horiz-adv-x="1795" d="M314 1082L319 962Q438 1102 640 1102Q867 1102 949 928Q1003 1006 1089 1054T1294 1102Q1650 1102 1656 725V0H1471V714Q1471 830 1418 887T1240 945Q1137 945 1069 884T990 718V0H804V709Q804 945 573 945Q391 945
-324 790V0H139V1082H314Z" />
-<glyph unicode="n" horiz-adv-x="1130" d="M315 1082L321 946Q445 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1082H315Z" />
-<glyph unicode="o" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729 807
-839T582 950Q445 950 361 841T277 529Z" />
-<glyph unicode="p" horiz-adv-x="1149" d="M1054 529Q1054 282 941 131T635 -20Q438 -20 325 105V-416H140V1082H309L318 962Q431 1102 632 1102Q827 1102 940 955T1054 546V529ZM869 550Q869 733 791 839T577 945Q409 945 325 796V279Q408 131 579 131Q712 131
-790 236T869 550Z" />
-<glyph unicode="q" horiz-adv-x="1164" d="M95 550Q95 805 212 953T526 1102Q718 1102 829 973L837 1082H1007V-416H822V100Q710 -20 524 -20Q328 -20 212 132T95 537V550ZM280 529Q280 343 358 237T570 131Q735 131 822 277V807Q734 950 572 950Q438 950 359
-844T280 529Z" />
-<glyph unicode="r" horiz-adv-x="693" d="M663 916Q621 923 572 923Q390 923 325 768V0H140V1082H320L323 957Q414 1102 581 1102Q635 1102 663 1088V916Z" />
-<glyph unicode="s" horiz-adv-x="1056" d="M770 287Q770 362 714 403T517 475T294 547T172 647T132 785Q132 918 244 1010T532 1102Q716 1102 830 1007T945 764H759Q759 840 695 895T532 950Q431 950 374 906T317 791Q317 724 370 690T561 625T786 551T913 448T955
-300Q955 155 839 68T538 -20Q408 -20 308 26T152 154T95 333H280Q285 240 354 186T538 131Q643 131 706 173T770 287Z" />
-<glyph unicode="t" horiz-adv-x="669" d="M391 1344V1082H593V939H391V268Q391 203 418 171T510 138Q542 138 598 150V0Q525 -20 456 -20Q332 -20 269 55T206 268V939H9V1082H206V1344H391Z" />
-<glyph unicode="u" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107Z" />
-<glyph unicode="v" horiz-adv-x="992" d="M497 251L765 1082H954L566 0H425L33 1082H222L497 251Z" />
-<glyph unicode="w" horiz-adv-x="1539" d="M1098 255L1306 1082H1491L1176 0H1026L763 820L507 0H357L43 1082H227L440 272L692 1082H841L1098 255Z" />
-<glyph unicode="x" horiz-adv-x="1015" d="M503 687L743 1082H959L605 547L970 0H756L506 405L256 0H41L406 547L52 1082H266L503 687Z" />
-<glyph unicode="y" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271Z" />
-<glyph unicode="z" horiz-adv-x="1015" d="M314 151H947V0H88V136L685 929H97V1082H917V951L314 151Z" />
-<glyph unicode="{" horiz-adv-x="693" d="M632 -366Q455 -316 366 -202T276 101V300Q276 543 64 543V688Q276 688 276 930V1138Q278 1321 365 1433T632 1597L670 1482Q461 1415 461 1133V931Q461 704 294 615Q461 525 461 296V90Q464 -185 670 -251L632 -366Z" />
-<glyph unicode="|" horiz-adv-x="499" d="M324 -270H175V1456H324V-270Z" />
-<glyph unicode="}" horiz-adv-x="693" d="M19 -251Q222 -186 229 80V300Q229 531 410 615Q229 697 229 930V1133Q229 1415 20 1482L58 1597Q235 1547 324 1435T414 1137V927Q414 688 626 688V543Q414 543 414 300V98Q414 -90 324 -203T58 -366L19 -251Z" />
-<glyph unicode="~" horiz-adv-x="1393" d="M1263 777Q1263 619 1170 511T939 402Q867 402 803 428T655 529T533 621T454 639Q376 639 334 586T292 438L131 436Q131 596 223 699T454 802Q530 802 600 770T758 658T910 567L939 565Q1015 565 1062 623T1110 776L1263 777Z" />
-<glyph unicode="&#xa0;" horiz-adv-x="507" />
-<glyph unicode="&#xa1;" horiz-adv-x="499" d="M170 684H338L351 -360H157L170 684ZM358 996Q358 951 331 920T249 889T167 920T139 996T167 1071T249 1101T330 1071T358 996Z" />
-<glyph unicode="&#xa2;" horiz-adv-x="1120" d="M586 131Q686 131 760 191T842 341H1017Q1011 215 912 115T669 -12V-245H484V-11Q305 23 205 165T105 527V562Q105 774 206 916T484 1092V1318H669V1095Q819 1072 915 966T1017 710H842Q834 815 763 882T586 950Q445
-950 368 849T290 555V520Q290 333 367 232T586 131Z" />
-<glyph unicode="&#xa3;" horiz-adv-x="1190" d="M449 622L457 402Q457 248 395 157H1128L1127 0H95V157H172Q212 166 237 231T264 393V401L256 622H91V779H251L242 1039Q242 1238 364 1357T687 1476Q877 1476 988 1370T1099 1087H908Q908 1194 845 1256T670 1318Q565
-1318 500 1241T435 1039L444 779H763V622H449Z" />
-<glyph unicode="&#xa4;" horiz-adv-x="1460" d="M1103 112Q944 -20 735 -20Q528 -20 369 110L235 -26L105 109L244 250Q140 406 140 608Q140 814 252 977L105 1128L235 1264L382 1114Q540 1234 735 1234Q931 1234 1090 1113L1239 1265L1371 1128L1220 974Q1330
-811 1330 608Q1330 412 1228 253L1371 109L1239 -27L1103 112ZM311 608Q311 485 368 379T524 212T735 151T946 212T1100 379T1157 608Q1157 730 1101 835T946 1001T735 1062Q622 1062 524 1002T369 836T311 608Z" />
-<glyph unicode="&#xa5;" horiz-adv-x="1240" d="M614 782L978 1456H1197L779 736H1091V611H707V446H1091V322H707V0H514V322H136V446H514V611H136V736H449L31 1456H251L614 782Z" />
-<glyph unicode="&#xa6;" horiz-adv-x="491" d="M147 -270V521H333V-270H147ZM333 698H147V1456H333V698Z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1256" d="M1145 431Q1145 242 959 157Q1028 108 1064 40T1100 -128Q1100 -296 970 -395T612 -495Q500 -495 400 -467T229 -382Q90 -269 90 -64L276 -62Q276 -192 366 -267T612 -343Q748 -343 831 -285T914 -130Q914 -41 843
-11T563 126Q381 174 285 229T143 362T96 551Q96 737 278 825Q212 874 177 942T141 1110Q141 1276 274 1376T630 1476Q862 1476 992 1363T1122 1045H937Q937 1170 853 1247T630 1325Q488 1325 408 1268T327 1112Q327 1043 355 1003T450 931T661 858T889 782T1030
-698T1116 585T1145 431ZM602 691Q512 715 437 742Q357 723 320 673T282 553Q282 483 309 443T402 370T611 296T797 238Q875 258 917 308T959 428Q959 516 890 570T602 691Z" />
-<glyph unicode="&#xa8;" horiz-adv-x="856" d="M102 1371Q102 1416 129 1446T211 1477T293 1447T321 1371T293 1296T211 1266T130 1296T102 1371ZM532 1369Q532 1414 559 1445T641 1476T723 1445T751 1369T723 1294T641 1264T560 1294T532 1369Z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1609" d="M1119 597Q1119 444 1033 364T788 283Q631 283 537 388T442 676V786Q442 962 537 1067T788 1173Q948 1173 1034 1091T1120 860H974Q974 959 927 1001T788 1044Q694 1044 640 975T586 783V670Q586 550 640 481T788
-412Q880 412 926 454T973 597H1119ZM206 729Q206 557 286 411T503 181T801 98T1098 181T1315 410T1395 729Q1395 899 1316 1044T1100 1272T801 1356Q641 1356 503 1274T286 1045T206 729ZM91 729Q91 931 184 1104T443 1376T801 1476T1158 1377T1416 1104T1510 729Q1510
-532 1420 360T1165 84T801 -21Q604 -21 439 82T182 358T91 729Z" />
-<glyph unicode="&#xaa;" horiz-adv-x="915" d="M618 705Q606 739 600 777Q524 691 396 691Q277 691 212 753T147 918Q147 1029 230 1089T486 1149H594V1201Q594 1336 470 1336Q401 1336 362 1309T322 1231L161 1243Q161 1346 247 1411T470 1476Q603 1476 680 1405T757
-1199V883Q757 786 783 705H618ZM435 828Q478 828 522 848T594 895V1037H482Q399 1036 355 1005T310 922Q310 828 435 828Z" />
-<glyph unicode="&#xab;" horiz-adv-x="961" d="M536 804L794 407H653L358 795V814L653 1203H794L536 804ZM610 548L868 151H727L432 539V558L727 947H868L610 548Z" />
-<glyph unicode="&#xac;" horiz-adv-x="1134" d="M958 375H772V639H127V800H958V375Z" />
-<glyph unicode="&#xad;" horiz-adv-x="565" d="M525 543H37V694H525V543Z" />
-<glyph unicode="&#xae;" horiz-adv-x="1610" d="M90 729Q90 931 183 1104T442 1376T800 1476T1157 1377T1415 1104T1509 729Q1509 532 1419 360T1164 84T800 -21Q603 -21 438 82T181 358T90 729ZM205 729Q205 557 285 411T502 181T800 98Q961 98 1099 182T1315
-412T1394 729Q1394 900 1316 1044T1099 1272T800 1356Q640 1356 502 1274T285 1045T205 729ZM653 654V316H512V1165H788Q941 1165 1025 1100T1110 909Q1110 786 982 721Q1104 671 1105 517V456Q1105 370 1122 332V316H977Q963 352 963 444T960 554Q944 650 829
-654H653ZM653 782H809Q881 784 925 817T969 904Q969 977 930 1007T791 1038H653V782Z" />
-<glyph unicode="&#xaf;" horiz-adv-x="938" d="M834 1313H120V1456H834V1313Z" />
-<glyph unicode="&#xb0;" horiz-adv-x="765" d="M130 1216Q130 1320 204 1398T385 1476Q489 1476 562 1399T636 1216Q636 1110 563 1035T385 960Q280 960 205 1035T130 1216ZM385 1088Q439 1088 476 1123T513 1216Q513 1274 476 1311T385 1349Q330 1349 293 1310T255
-1216T292 1125T385 1088Z" />
-<glyph unicode="&#xb1;" horiz-adv-x="1094" d="M649 854H1013V703H649V289H482V703H97V854H482V1267H649V854ZM970 0H135V152H970V0Z" />
-<glyph unicode="&#xb2;" horiz-adv-x="751" d="M683 667H84V775L384 1057Q493 1159 493 1228Q493 1277 461 1307T369 1338Q294 1338 259 1300T223 1205H66Q66 1319 149 1393T365 1467T574 1404T651 1230Q651 1126 544 1019L460 940L284 795H683V667Z" />
-<glyph unicode="&#xb3;" horiz-adv-x="751" d="M265 1125H349Q423 1125 459 1155T495 1234Q495 1279 464 1308T362 1337Q305 1337 268 1312T230 1245H73Q73 1343 154 1404T360 1466Q497 1466 575 1406T653 1241Q653 1186 618 1141T517 1070Q666 1029 666 886Q666
-780 581 718T360 655Q228 655 145 718T62 888H220Q220 843 259 813T366 783Q436 783 472 813T509 894Q509 1007 353 1009H265V1125Z" />
-<glyph unicode="&#xb4;" horiz-adv-x="642" d="M316 1534H540L272 1240H123L316 1534Z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1160" d="M339 1082V449Q340 286 391 208T559 130Q758 130 820 282V1082H1006V0H839L830 115Q737 -20 567 -20Q420 -20 339 53V-416H154V1082H339Z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1001" d="M646 0V520H562Q332 520 200 647T67 988Q67 1201 200 1328T563 1456H832V0H646Z" />
-<glyph unicode="&#xb7;" horiz-adv-x="534" d="M147 729Q147 777 175 809T261 841T347 809T377 729Q377 682 348 651T261 619T176 650T147 729Z" />
-<glyph unicode="&#xb8;" horiz-adv-x="507" d="M285 0L273 -52Q426 -79 426 -225Q426 -322 346 -378T123 -435L116 -328Q195 -328 238 -302T282 -229Q282 -185 250 -164T120 -134L152 0H285Z" />
-<glyph unicode="&#xb9;" horiz-adv-x="751" d="M495 674H338V1275L122 1218V1346L477 1463H495V674Z" />
-<glyph unicode="&#xba;" horiz-adv-x="931" d="M122 1123Q122 1281 216 1378T464 1476Q619 1476 713 1380T807 1117V1043Q807 884 714 787T466 690T217 787T122 1049V1123ZM285 1043Q285 943 333 886T466 829Q549 829 596 886T644 1045V1123Q644 1222 596 1279T464
-1336Q383 1336 335 1281T285 1129V1043Z" />
-<glyph unicode="&#xbb;" horiz-adv-x="960" d="M244 949L539 560V541L244 152H102L360 550L102 949H244ZM593 949L888 560V541L593 152H451L709 550L451 949H593Z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1500" d="M458 664H301V1265L85 1208V1336L440 1453H458V664ZM443 118L339 184L1050 1322L1154 1256L443 118ZM1318 299H1425V169H1318V0H1161V169H786L780 271L1157 789H1318V299ZM938 299H1161V588L1144 560L938 299Z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1589" d="M399 118L295 184L1006 1322L1110 1256L399 118ZM453 664H296V1265L80 1208V1336L435 1453H453V664ZM1481 0H882V108L1182 390Q1291 492 1291 561Q1291 610 1259 640T1167 671Q1092 671 1057 633T1021 538H864Q864
-652 947 726T1163 800T1372 737T1449 563Q1449 459 1342 352L1258 273L1082 128H1481V0Z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1593" d="M570 118L466 184L1177 1322L1281 1256L570 118ZM1410 299H1517V169H1410V0H1253V169H878L872 271L1249 789H1410V299ZM1030 299H1253V588L1236 560L1030 299ZM314 1126H398Q472 1126 508 1156T544 1235Q544 1280
-513 1309T411 1338Q354 1338 317 1313T279 1246H122Q122 1344 203 1405T409 1467Q546 1467 624 1407T702 1242Q702 1187 667 1142T566 1071Q715 1030 715 887Q715 781 630 719T409 656Q277 656 194 719T111 889H269Q269 844 308 814T415 784Q485 784 521 814T558
-895Q558 1008 402 1010H314V1126Z" />
-<glyph unicode="&#xbf;" horiz-adv-x="969" d="M588 680Q587 574 567 511T498 388T358 233T255 37L253 0Q253 -109 311 -166T478 -224Q578 -224 640 -168T703 -20H888Q886 -181 774 -283T478 -385Q282 -385 175 -285T68 -5Q68 168 228 343L337 456Q403 534 403
-680H588ZM596 997Q596 952 569 921T487 890T405 921T377 997Q377 1041 405 1071T487 1101T568 1071T596 997Z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM778 1550H619L361 1844H584L778 1550Z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM763 1844H987L719 1550H570L763 1844Z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM975 1572V1562H822L672 1732L523 1562H370V1574L616 1846H728L975 1572Z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM1027 1814Q1027 1706 966 1639T812 1572Q771 1572 741 1582T663 1623T593 1660T543 1667Q502 1667 473 1636T444 1555L320
-1562Q320 1669 380 1739T534 1809Q569 1809 597 1799T673 1760T746 1722T803 1713Q846 1713 874 1747T903 1826L1027 1814Z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM351 1681Q351 1726 378 1756T460 1787T542 1757T570 1681T542 1606T460 1576T379 1606T351 1681ZM781 1679Q781 1724
-808 1755T890 1786T972 1755T1000 1679T972 1604T890 1574T809 1604T781 1679Z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM887 1729Q887 1642 825 1584T672 1525Q580 1525 519 1584T457 1729T518 1876T672 1937T825 1876T887 1729ZM556 1729Q556
-1682 589 1648T672 1614Q720 1614 754 1647T788 1729T755 1812T672 1847Q622 1847 589 1812T556 1729Z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1914" d="M1879 0H996L981 353H417L212 0H-14L866 1456H1817V1304H1126L1146 833H1736V682H1152L1174 151H1879V0ZM518 527H974L943 1260L518 527Z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1333" d="M1240 462Q1213 231 1070 106T688 -20Q430 -20 275 165T119 660V800Q119 1003 191 1157T397 1393T705 1476Q937 1476 1077 1347T1240 988H1047Q1022 1162 939 1240T705 1318Q521 1318 417 1182T312 795V654Q312
-417 411 277T688 137Q848 137 933 209T1047 462H1240ZM751 -9L739 -61Q892 -88 892 -234Q892 -331 812 -387T589 -444L582 -337Q661 -337 704 -311T748 -238Q748 -194 716 -173T586 -143L618 -9H751Z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM725 1562H566L308 1856H531L725 1562Z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM710 1856H934L666 1562H517L710 1856Z" />
-<glyph unicode="&#xca;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM922 1584V1574H769L619 1744L470 1574H317V1586L563 1858H675L922 1584Z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM298 1693Q298 1738 325 1768T407 1799T489 1769T517 1693T489 1618T407 1588T326 1618T298 1693ZM728 1691Q728 1736 755 1767T837 1798T919 1767T947
-1691T919 1616T837 1586T756 1616T728 1691Z" />
-<glyph unicode="&#xcc;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM385 1562H226L-32 1856H191L385 1562Z" />
-<glyph unicode="&#xcd;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM369 1856H593L325 1562H176L369 1856Z" />
-<glyph unicode="&#xce;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM582 1584V1574H429L279 1744L130 1574H-23V1586L223 1858H335L582 1584Z" />
-<glyph unicode="&#xcf;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM-42 1693Q-42 1738 -15 1768T67 1799T149 1769T177 1693T149 1618T67 1588T-14 1618T-42 1693ZM388 1691Q388 1736 415 1767T497 1798T579 1767T607 1691T579 1616T497 1586T416 1616T388 1691Z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1373" d="M199 0V666H37V817H199V1456H610Q800 1456 946 1372T1171 1133T1252 777V684Q1252 478 1173 323T946 85T602 0H199ZM673 666H391V157H592Q814 157 937 294T1062 680V773Q1062 1021 946 1158T615 1298H391V817H673V666Z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1460" d="M1288 0H1095L362 1122V0H169V1456H362L1097 329V1456H1288V0ZM1081 1814Q1081 1706 1020 1639T866 1572Q825 1572 795 1582T717 1623T647 1660T597 1667Q556 1667 527 1636T498 1555L374 1562Q374 1669 434 1739T588
-1809Q623 1809 651 1799T727 1760T800 1722T857 1713Q900 1713 928 1747T957 1826L1081 1814Z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM812 1552H653L395 1846H618L812 1552Z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM797 1846H1021L753 1552H604L797 1846Z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM1009 1574V1564H856L706 1734L557 1564H404V1576L650 1848H762L1009 1574Z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM1061 1816Q1061 1708 1000 1641T846 1574Q805 1574 775 1584T697 1625T627 1662T577 1669Q536 1669 507 1638T478 1557L354 1564Q354 1671 414 1741T568 1811Q603 1811 631 1801T707
-1762T780 1724T837 1715Q880 1715 908 1749T937 1828L1061 1816Z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
-1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM385 1683Q385 1728 412 1758T494 1789T576 1759T604 1683T576 1608T494 1578T413 1608T385 1683ZM815 1681Q815 1726 842 1757T924 1788T1006 1757T1034 1681T1006 1606T924
-1576T843 1606T815 1681Z" />
-<glyph unicode="&#xd7;" horiz-adv-x="1092" d="M89 329L419 665L91 1000L210 1123L539 788L868 1123L987 1000L659 665L989 329L870 206L539 543L208 206L89 329Z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q534 -20 403 62L306 -93H164L308 138Q118 330 118 690V773Q118 983 191 1144T397 1390T703 1476Q917 1476 1065 1351L1168 1516H1309L1150 1261Q1287 1074 1289 780V681ZM309
-681Q309 437 407 296L971 1200Q869 1311 703 1311Q521 1311 417 1173T309 788V681ZM1098 775Q1098 957 1042 1088L493 207Q584 143 705 143Q891 143 993 278T1098 667V775Z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM773 1550H614L356 1844H579L773 1550Z" />
-<glyph unicode="&#xda;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM758 1844H982L714 1550H565L758 1844Z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM970 1572V1562H817L667 1732L518 1562H365V1574L611
-1846H723L970 1572Z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM346 1681Q346 1726 373 1756T455 1787T537 1757T565
-1681T537 1606T455 1576T374 1606T346 1681ZM776 1679Q776 1724 803 1755T885 1786T967 1755T995 1679T967 1604T885 1574T804 1604T776 1679Z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1230" d="M613 725L993 1456H1211L709 543V0H517V543L15 1456H235L613 725ZM708 1844H932L664 1550H515L708 1844Z" />
-<glyph unicode="&#xde;" horiz-adv-x="1210" d="M352 1456V1163H631Q778 1163 888 1111T1057 961T1117 738Q1117 544 985 429T626 313H352V0H166V1456H352ZM352 1011V465H629Q771 465 851 540T931 736Q931 859 851 934T635 1011H352Z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1218" d="M324 0H139V1111Q139 1319 242 1436T532 1554Q712 1554 810 1465T909 1216Q909 1091 845 990T781 819Q781 768 818 721T950 601T1087 461T1130 317Q1130 158 1029 69T745 -20Q664 -20 574 2T445 52L488 207Q537
-175 604 153T725 131Q832 131 888 178T945 307Q945 359 908 407T777 528T639 671T595 821Q595 910 664 1013T734 1201Q734 1295 682 1348T542 1402Q324 1402 324 1109V0Z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM687 1240H528L270 1534H493L687 1240Z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM672 1534H896L628 1240H479L672 1534Z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM884 1262V1252H731L581 1422L432 1252H279V1264L525 1536H637L884 1262Z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM936 1504Q936 1396 875 1329T721 1262Q680 1262 650 1272T572 1313T502 1350T452 1357Q411 1357 382 1326T353 1245L229 1252Q229 1359 289
-1429T443 1499Q478 1499 506 1489T582 1450T655 1412T712 1403Q755 1403 783 1437T812 1516L936 1504Z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM260 1371Q260 1416 287 1446T369 1477T451 1447T479 1371T451 1296T369 1266T288 1296T260 1371ZM690 1369Q690 1414 717 1445T799 1476T881
-1445T909 1369T881 1294T799 1264T718 1294T690 1369Z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
-751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM796 1419Q796 1332 734 1274T581 1215Q489 1215 428 1274T366 1419T427 1566T581 1627T734 1566T796 1419ZM465 1419Q465 1372 498 1338T581
-1304Q629 1304 663 1337T697 1419T664 1502T581 1537Q531 1537 498 1502T465 1419Z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M1262 -20Q1001 -20 865 160Q800 74 687 27T433 -20Q266 -20 172 66T78 304Q78 461 191 548T526 635H749V720Q749 827 694 888T535 950Q430 950 360 895T290 759L106 778Q106 921 227 1011T535 1102Q650 1102 738
-1061T876 936Q939 1015 1026 1058T1218 1102Q1428 1102 1544 974T1660 612V497H932Q939 321 1026 226T1262 130Q1410 130 1531 206L1578 237L1642 101Q1484 -20 1262 -20ZM469 130Q541 130 620 167T749 258V495H521Q404 493 334 438T264 300Q264 223 317 177T469
-130ZM1218 950Q1103 950 1029 865T937 640H1475V671Q1475 803 1408 876T1218 950Z" />
-<glyph unicode="&#xe7;" horiz-adv-x="1072" d="M574 131Q673 131 747 191T829 341H1004Q999 248 940 164T783 30T574 -20Q353 -20 223 127T92 531V562Q92 720 150 843T316 1034T573 1102Q755 1102 875 993T1004 710H829Q821 815 750 882T573 950Q432 950 355
-849T277 555V520Q277 333 354 232T574 131ZM604 -9L592 -61Q745 -88 745 -234Q745 -331 665 -387T442 -444L435 -337Q514 -337 557 -311T601 -238Q601 -194 569 -173T439 -143L471 -9H604Z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM671 1240H512L254 1534H477L671 1240Z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM656 1534H880L612 1240H463L656 1534Z" />
-<glyph unicode="&#xea;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM868 1262V1252H715L565 1422L416 1252H263V1264L509 1536H621L868 1262Z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
-869T284 640H826V654Q818 795 750 872T566 950ZM244 1371Q244 1416 271 1446T353 1477T435 1447T463 1371T435 1296T353 1266T272 1296T244 1371ZM674 1369Q674 1414 701 1445T783 1476T865 1445T893 1369T865 1294T783 1264T702 1294T674 1369Z" />
-<glyph unicode="&#xec;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM615 1495H456L198 1789H421L615 1495Z" />
-<glyph unicode="&#xed;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM343 1789H567L299 1495H150L343 1789Z" />
-<glyph unicode="&#xee;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM556 1261V1251H403L253 1421L104 1251H-49V1263L197 1535H309L556 1261Z" />
-<glyph unicode="&#xef;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM-68 1370Q-68 1415 -41 1445T41 1476T123 1446T151 1370T123 1295T41 1265T-40 1295T-68 1370ZM362 1368Q362 1413 389 1444T471 1475T553 1444T581 1368T553 1293T471 1263T390 1293T362 1368Z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1200" d="M820 1301Q1069 1037 1069 628V535Q1069 377 1011 251T844 52T602 -20Q467 -20 357 44T187 221T126 467Q126 614 182 730T341 912T574 977Q737 977 858 863Q810 1058 669 1199L451 1051L378 1150L570 1281Q438 1372
-255 1421L312 1580Q551 1526 726 1387L915 1516L988 1416L820 1301ZM884 635L882 691Q849 752 780 788T618 825Q473 825 392 730T311 467Q311 327 394 229T606 131Q731 131 807 244T884 541V635Z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1130" d="M315 1082L321 946Q445 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1082H315ZM927 1504Q927 1396 866 1329T712 1262Q671 1262 641 1272T563 1313T493 1350T443
-1357Q402 1357 373 1326T344 1245L220 1252Q220 1359 280 1429T434 1499Q469 1499 497 1489T573 1450T646 1412T703 1403Q746 1403 774 1437T803 1516L927 1504Z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM681 1240H522L264 1534H487L681 1240Z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM666 1534H890L622 1240H473L666 1534Z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM878 1262V1252H725L575 1422L426 1252H273V1264L519 1536H631L878 1262Z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM930 1504Q930 1396 869 1329T715 1262Q674 1262 644 1272T566 1313T496 1350T446 1357Q405 1357 376 1326T347 1245L223 1252Q223 1359 283 1429T437 1499Q472 1499 500 1489T576 1450T649 1412T706 1403Q749 1403 777
-1437T806 1516L930 1504Z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
-807 839T582 950Q445 950 361 841T277 529ZM254 1371Q254 1416 281 1446T363 1477T445 1447T473 1371T445 1296T363 1266T282 1296T254 1371ZM684 1369Q684 1414 711 1445T793 1476T875 1445T903 1369T875 1294T793 1264T712 1294T684 1369Z" />
-<glyph unicode="&#xf7;" horiz-adv-x="1169" d="M1069 600H71V784H1069V600ZM461 1098Q461 1146 489 1178T575 1210T661 1178T691 1098Q691 1051 662 1020T575 989T490 1020T461 1098ZM461 281Q461 329 489 361T575 393T661 361T691 281Q691 235 662 204T575 172T490
-203T461 281Z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1160" d="M91 551Q91 710 152 836T326 1032T582 1102Q692 1102 786 1060L859 1208H983L881 1003Q1076 849 1076 529Q1076 371 1014 244T840 49T584 -20Q480 -20 394 15L320 -134H196L296 69Q91 218 91 551ZM276 529Q276 335
-373 224L716 918Q654 950 582 950Q444 950 360 841T276 529ZM890 551Q890 733 803 844L463 156Q518 131 584 131Q723 131 806 240T890 535V551Z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM673 1240H514L256 1534H479L673 1240Z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM658 1534H882L614 1240H465L658 1534Z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM870 1262V1252H717L567 1422L418 1252H265V1264L511 1536H623L870 1262Z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM246 1371Q246 1416 273 1446T355 1477T437 1447T465 1371T437 1296T355 1266T274 1296T246
-1371ZM676 1369Q676 1414 703 1445T785 1476T867 1445T895 1369T867 1294T785 1264T704 1294T676 1369Z" />
-<glyph unicode="&#xfd;" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271ZM599 1534H823L555 1240H406L599 1534Z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1180" d="M1063 529Q1063 282 950 131T644 -20Q447 -20 334 105V-416H149V1536H334V970Q447 1102 641 1102Q836 1102 949 955T1063 546V529ZM878 550Q878 733 800 839T586 945Q418 945 334 796V279Q417 131 588 131Q721 131
-799 236T878 550Z" />
-<glyph unicode="&#xff;" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271ZM187 1371Q187 1416 214 1446T296 1477T378 1447T406 1371T378 1296T296
-1266T215 1296T187 1371ZM617 1369Q617 1414 644 1445T726 1476T808 1445T836 1369T808 1294T726 1264T645 1294T617 1369Z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1344" d="M1421 651H419V802H1421V651Z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1599" d="M1737 651H401V802H1737V651Z" />
-<glyph unicode="&#x2018;" horiz-adv-x="409" d="M270 1555L376 1483Q283 1356 280 1209V1073H96V1189Q96 1291 144 1391T270 1555Z" />
-<glyph unicode="&#x2019;" horiz-adv-x="409" d="M153 1046L48 1118Q141 1248 144 1392V1536H327V1406Q326 1306 278 1207T153 1046Z" />
-<glyph unicode="&#x201a;" horiz-adv-x="407" d="M141 -283L36 -210Q127 -83 130 63V181H315V81Q315 -20 266 -121T141 -283Z" />
-<glyph unicode="&#x201c;" horiz-adv-x="724" d="M278 1555L384 1483Q291 1356 288 1209V1073H104V1189Q104 1291 152 1391T278 1555ZM593 1555L699 1483Q606 1356 603 1209V1073H419V1189Q419 1291 467 1391T593 1555Z" />
-<glyph unicode="&#x201d;" horiz-adv-x="731" d="M165 1046L60 1118Q153 1248 156 1392V1536H339V1406Q338 1306 290 1207T165 1046ZM472 1046L367 1118Q460 1248 463 1392V1536H646V1406Q645 1306 597 1207T472 1046Z" />
-<glyph unicode="&#x201e;" horiz-adv-x="705" d="M141 -301L36 -229Q127 -92 130 61V246H315V82Q315 -26 266 -131T141 -301ZM437 -301L332 -229Q423 -92 426 61V246H612V82Q612 -25 564 -129T437 -301Z" />
-<glyph unicode="&#x2022;" horiz-adv-x="690" d="M138 772Q138 859 193 915T341 971Q432 971 489 917T546 769V732Q546 645 491 590T342 535Q249 535 194 590T138 734V772Z" />
-<glyph unicode="&#x2039;" horiz-adv-x="614" d="M286 550L544 153H403L108 541V560L403 949H544L286 550Z" />
-<glyph unicode="&#x203a;" horiz-adv-x="614" d="M231 949L526 560V541L231 152H89L347 550L89 949H231Z" />
-</font>
-</defs>
-</svg>
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2 b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
deleted file mode 100644
index 120796b..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
deleted file mode 100644
index d26bc8f..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
deleted file mode 100644
index 73c64a5..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+++ /dev/null
@@ -1,6 +0,0 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){"use strict";function e(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function t(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function r(e,r){return t(e).appendChild(r)}function n(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function i(e,t,r,i){var o=n(e,t,r,i);return o.setAttribute("role","presentation"),o}function o(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function l(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function s(t,r){var n=t.className;e(r).test(n)||(t.className+=(n?" ":"")+r)}function a(t,r){for(var n=t.split(" "),i=0;i<n.length;i++)n[i]&&!e(n[i]).test(r)&&(r+=" "+n[i]);return r}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function c(e,t,r){t||(t={});for(var n in e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function f(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,l=i||0;;){var s=e.indexOf("\t",o);if(s<0||s>=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}function h(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}function d(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var l=o-n;if(o==e.length||i+l>=t)return n+Math.min(l,t-i);if(i+=o-n,i+=r-i%r,n=o+1,i>=t)return n}}function p(e){for(;Yl.length<=e;)Yl.push(g(Yl)+" ");return Yl[e]}function g(e){return e[e.length-1]}function v(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function m(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}function y(){}function b(e,t){var r;return Object.create?r=Object.create(e):(y.prototype=e,r=new y),t&&c(t,r),r}function w(e){return/\w/.test(e)||e>""&&(e.toUpperCase()!=e.toLowerCase()||_l.test(e))}function x(e,t){return t?!!(t.source.indexOf("\\w")>-1&&w(e))||t.test(e):w(e)}function C(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function S(e){return e.charCodeAt(0)>=768&&ql.test(e)}function L(e,t,r){for(;(r<0?t>0:t<e.length)&&S(e.charAt(t));)t+=r;return t}function k(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function T(e,t,r){var o=this;this.input=r,o.scrollbarFiller=n("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=n("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=i("div",null,"CodeMirror-code"),o.selectionDiv=n("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=n("div",null,"CodeMirror-cursors"),o.measure=n("div",null,"CodeMirror-measure"),o.lineMeasure=n("div",null,"CodeMirror-measure"),o.lineSpace=i("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var l=i("div",[o.lineSpace],"CodeMirror-lines");o.mover=n("div",[l],null,"position: relative"),o.sizer=n("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=n("div",null,null,"position: absolute; height: "+Ul+"px; width: 1px;"),o.gutters=n("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=n("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=n("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),yl&&bl<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),wl||pl&&Ol||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,r.init(o)}function M(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function N(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}),n}function O(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function A(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function W(e){if(null==e.parent)return null;for(var t=e.parent,r=h(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function D(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l],a=s.height;if(t<a)break;t-=a}return r+l}function H(e,t){return t>=e.first&&t<e.first+e.size}function F(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function P(e,t,r){if(void 0===r&&(r=null),!(this instanceof P))return new P(e,t,r);this.line=e,this.ch=t,this.sticky=r}function E(e,t){return e.line-t.line||e.ch-t.ch}function z(e,t){return e.sticky==t.sticky&&0==E(e,t)}function I(e){return P(e.line,e.ch)}function R(e,t){return E(e,t)<0?t:e}function B(e,t){return E(e,t)<0?e:t}function G(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function U(e,t){if(t.line<e.first)return P(e.first,0);var r=e.first+e.size-1;return t.line>r?P(r,M(e,r).text.length):V(t,M(e,t.line).text.length)}function V(e,t){var r=e.ch;return null==r||r>t?P(e.line,t):r<0?P(e.line,0):e}function K(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=U(e,t[n]);return r}function j(){$l=!0}function X(){Zl=!0}function Y(e,t,r){this.marker=e,this.from=t,this.to=r}function _(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function q(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function $(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function Z(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker,s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);if(s||o.from==t&&"bookmark"==l.type&&(!r||!o.marker.insertLeft)){var a=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Y(l,o.from,a?null:o.to))}}return n}function Q(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker,s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);if(s||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var a=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Y(l,a?null:o.from-t,null==o.to?null:o.to-t))}}return n}function J(e,t){if(t.full)return null;var r=H(e,t.from.line)&&M(e,t.from.line).markedSpans,n=H(e,t.to.line)&&M(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,l=0==E(t.from,t.to),s=Z(r,i,l),a=Q(n,o,l),u=1==t.text.length,c=g(t.text).length+(u?i:0);if(s)for(var f=0;f<s.length;++f){var h=s[f];if(null==h.to){var d=_(a,h.marker);d?u&&(h.to=null==d.to?null:d.to+c):h.to=i}}if(a)for(var p=0;p<a.length;++p){var v=a[p];if(null!=v.to&&(v.to+=c),null==v.from){var m=_(s,v.marker);m||(v.from=c,u&&(s||(s=[])).push(v))}else v.from+=c,u&&(s||(s=[])).push(v)}s&&(s=ee(s)),a&&a!=s&&(a=ee(a));var y=[s];if(!u){var b,w=t.text.length-2;if(w>0&&s)for(var x=0;x<s.length;++x)null==s[x].to&&(b||(b=[])).push(new Y(s[x].marker,null,null));for(var C=0;C<w;++C)y.push(b);y.push(a)}return y}function ee(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function te(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=h(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var l=n[o],s=l.find(0),a=0;a<i.length;++a){var u=i[a];if(!(E(u.to,s.from)<0||E(u.from,s.to)>0)){var c=[a,1],f=E(u.from,s.from),d=E(u.to,s.to);(f<0||!l.inclusiveLeft&&!f)&&c.push({from:u.from,to:s.from}),(d>0||!l.inclusiveRight&&!d)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}function re(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function ne(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function ie(e){return e.inclusiveLeft?-1:0}function oe(e){return e.inclusiveRight?1:0}function le(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=E(n.from,i.from)||ie(e)-ie(t);if(o)return-o;var l=E(n.to,i.to)||oe(e)-oe(t);return l||t.id-e.id}function se(e,t){var r,n=Zl&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)i=n[o],i.marker.collapsed&&null==(t?i.from:i.to)&&(!r||le(r,i.marker)<0)&&(r=i.marker);return r}function ae(e){return se(e,!0)}function ue(e){return se(e,!1)}function ce(e,t,r,n,i){var o=M(e,t),l=Zl&&o.markedSpans;if(l)for(var s=0;s<l.length;++s){var a=l[s];if(a.marker.collapsed){var u=a.marker.find(0),c=E(u.from,r)||ie(a.marker)-ie(i),f=E(u.to,n)||oe(a.marker)-oe(i);if(!(c>=0&&f<=0||c<=0&&f>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?E(u.to,r)>=0:E(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?E(u.from,n)<=0:E(u.from,n)<0)))return!0}}}function fe(e){for(var t;t=ae(e);)e=t.find(-1,!0).line;return e}function he(e){for(var t;t=ue(e);)e=t.find(1,!0).line;return e}function de(e){for(var t,r;t=ue(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}function pe(e,t){var r=M(e,t),n=fe(r);return r==n?t:W(n)}function ge(e,t){if(t>e.lastLine())return t;var r,n=M(e,t);if(!ve(e,n))return t;for(;r=ue(n);)n=r.find(1,!0).line;return W(n)+1}function ve(e,t){var r=Zl&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if(n=r[i],n.marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&me(e,t,n))return!0}}function me(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return me(e,n.line,_(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if(i=t.markedSpans[o],i.marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&me(e,t,i))return!0}function ye(e){e=fe(e);for(var t=0,r=e.parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;r=o,o=r.parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==r)break;t+=s.height}return t}function be(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=ae(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=ue(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,n=o.to.line,r+=n.text.length-o.to.ch}return r}function we(e){var t=e.display,r=e.doc;t.maxLine=M(r,r.first),t.maxLineLength=be(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=be(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}function xe(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<r&&l.to>t||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}function Ce(e,t,r){var n;Ql=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:Ql=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:Ql=i)}return null!=n?n:Ql}function Se(e,t){var r=e.order;return null==r&&(r=e.order=Jl(e.text,t)),r}function Le(e,t){return e._handlers&&e._handlers[t]||es}function ke(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=h(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function Te(e,t){var r=Le(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function Me(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),Te(e,r||t.type,e,t),He(t)||t.codemirrorIgnore}function Ne(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==h(r,t[n])&&r.push(t[n])}function Oe(e,t){return Le(e,t).length>0}function Ae(e){e.prototype.on=function(e,t){ts(this,e,t)},e.prototype.off=function(e,t){ke(this,e,t)}}function We(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function De(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function He(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Fe(e){We(e),De(e)}function Pe(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Al&&e.ctrlKey&&1==t&&(t=3),t}function ze(e){if(null==Bl){var t=n("span","​");r(e,n("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Bl=t.offsetWidth<=1&&t.offsetHeight>2&&!(yl&&bl<8))}var i=Bl?n("span","​"):n("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Ie(e){if(null!=Gl)return Gl;var n=r(e,document.createTextNode("AخA")),i=Fl(n,0,1).getBoundingClientRect(),o=Fl(n,1,2).getBoundingClientRect();return t(e),!(!i||i.left==i.right)&&(Gl=o.right-i.right<3)}function Re(e){if(null!=ls)return ls;var t=r(e,n("span","x")),i=t.getBoundingClientRect(),o=Fl(t,0,1).getBoundingClientRect();return ls=Math.abs(i.left-o.left)>1}function Be(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),ss[e]=t}function Ge(e,t){as[e]=t}function Ue(e){if("string"==typeof e&&as.hasOwnProperty(e))e=as[e];else if(e&&"string"==typeof e.name&&as.hasOwnProperty(e.name)){var t=as[e.name];"string"==typeof t&&(t={name:t}),e=b(t,e),e.name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ue("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ue("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ve(e,t){t=Ue(t);var r=ss[t.name];if(!r)return Ve(e,"text/plain");var n=r(e,t);if(us.hasOwnProperty(t.name)){var i=us[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}function Ke(e,t){c(t,us.hasOwnProperty(e)?us[e]:us[e]={})}function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Xe(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ye(e,t,r){return!e.startState||e.startState(t,r)}function _e(e,t,r,n){var i=[e.state.modeGen],o={};rt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=0;s<e.state.overlays.length;++s)!function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,rt(e,t.text,s.mode,r,function(e,t){for(var r=a;u<e;){var n=i[a];n>e&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;r<a;r+=2){var o=i[r+1];i[r+1]=(o?o+" ":"")+"overlay "+t}},o),r.state=l,r.baseTokens=null,r.baseTokenPos=1}(s);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function qe(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=$e(e,W(t)),i=t.text.length>e.options.maxHighlightLength&&je(e.doc.mode,n.state),o=_e(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function $e(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new hs(n,!0,t);var o=nt(e,t,r),l=o>n.first&&M(n,o-1).stateAfter,s=l?hs.fromSaved(n,l,o):new hs(n,Ye(n.mode),o);return n.iter(o,t,function(r){Ze(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?s.save():null,s.nextLine()}),r&&(n.modeFrontier=s.line),s}function Ze(e,t,r,n){var i=e.doc.mode,o=new cs(t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Qe(i,r.state);!o.eol();)Je(i,o,r.state),o.start=o.pos}function Qe(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=Xe(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Je(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=Xe(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}function et(e,t,r,n){var i,o=e.doc,l=o.mode;t=U(o,t);var s,a=M(o,t.line),u=$e(e,t.line,r),c=new cs(a.text,e.options.tabSize,u);for(n&&(s=[]);(n||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Je(l,c,u.state),n&&s.push(new ds(c,i,je(o.mode,u.state)));return n?s:new ds(c,i,u.state)}function tt(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function rt(e,t,r,n,i,o,l){var s=r.flattenSpans;null==s&&(s=e.options.flattenSpans);var a,u=0,c=null,f=new cs(t,e.options.tabSize,n),h=e.options.addModeClass&&[null];for(""==t&&tt(Qe(r,n.state),o);!f.eol();){if(f.pos>e.options.maxHighlightLength?(s=!1,l&&Ze(e,t,n,f.pos),f.pos=t.length,a=null):a=tt(Je(r,f,n.state,h),o),h){var d=h[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u<f.start;)u=Math.min(f.start,u+5e3),i(u,c);c=a}f.start=f.pos}for(;u<f.pos;){var p=Math.min(f.pos,u+5e3);i(p,c),u=p}}function nt(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=M(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof fs?u.lookAhead:0)<=o.modeFrontier))return s;var c=f(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}function it(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=M(e,n).stateAfter;if(i&&(!(i instanceof fs)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}}function ot(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),re(e),ne(e,r);var i=n?n(e):1;i!=e.height&&A(e,i)}function lt(e){e.parent=null,re(e)}function st(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?ms:vs;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function at(e,t){var r=i("span",null,null,wl?"padding-right: .1px":null),n={pre:i("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(yl||wl)&&e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var l=o?t.rest[o-1]:t.line,s=void 0;n.pos=0,n.addToken=ct,Ie(e.display.measure)&&(s=Se(l,e.doc.direction))&&(n.addToken=ht(n.addToken,s)),n.map=[];pt(l,n,qe(e,l,t!=e.display.externalMeasured&&W(l))),l.styleClasses&&(l.styleClasses.bgClass&&(n.bgClass=a(l.styleClasses.bgClass,n.bgClass||"")),l.styleClasses.textClass&&(n.textClass=a(l.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(ze(e.display.measure))),0==o?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(wl){var u=n.content.lastChild;(/\bcm-tab\b/.test(u.className)||u.querySelector&&u.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return Te(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=a(n.pre.className,n.textClass||"")),n}function ut(e){var t=n("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function ct(e,t,r,i,o,l,s){if(t){var a,u=e.splitSpaces?ft(t,e.trailingSpace):t,c=e.cm.state.specialChars,f=!1;if(c.test(t)){a=document.createDocumentFragment();for(var h=0;;){c.lastIndex=h;var d=c.exec(t),g=d?d.index-h:t.length-h;if(g){var v=document.createTextNode(u.slice(h,h+g));yl&&bl<9?a.appendChild(n("span",[v])):a.appendChild(v),e.map.push(e.pos,e.pos+g,v),e.col+=g,e.pos+=g}if(!d)break;h+=g+1;var m=void 0;if("\t"==d[0]){var y=e.cm.options.tabSize,b=y-e.col%y;m=a.appendChild(n("span",p(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),e.col+=b}else"\r"==d[0]||"\n"==d[0]?(m=a.appendChild(n("span","\r"==d[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",d[0]),e.col+=1):(m=e.cm.options.specialCharPlaceholder(d[0]),m.setAttribute("cm-text",d[0]),yl&&bl<9?a.appendChild(n("span",[m])):a.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,a=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,a),yl&&bl<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),r||i||o||f||s){var w=r||"";i&&(w+=i),o&&(w+=o);var x=n("span",[a],w,s);return l&&(x.title=l),e.content.appendChild(x)}e.content.appendChild(a)}}function ft(e,t){if(e.length>1&&!/  /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}function ht(e,t){return function(r,n,i,o,l,s,a){i=i?i+" cm-force-border":"cm-force-border";for(var u=r.pos,c=u+n.length;;){for(var f=void 0,h=0;h<t.length&&(f=t[h],!(f.to>u&&f.from<=u));h++);if(f.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,f.to-u),i,o,null,s,a),o=null,n=n.slice(f.to-u),u=f.to}}}function dt(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function pt(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,f,h,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=f=s="",h=null,m=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],C=x.marker;"bookmark"==C.type&&x.from==p&&C.widgetNode?y.push(C):x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&!f&&(f=C.title),C.collapsed&&(!h||le(h.marker,C)<0)&&(h=x)):x.from>p&&m>x.from&&(m=x.from)}if(b)for(var S=0;S<b.length;S+=2)b[S+1]==m&&(u+=" "+b[S]);if(!h||h.from==p)for(var L=0;L<y.length;++L)dt(t,0,y[L]);if(h&&(h.from||0)==p){if(dt(t,(null==h.to?d+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=d)break;for(var k=Math.min(d,m);;){if(v){var T=p+v.length;if(!h){var M=T>k?v.slice(0,k-p):v;t.addToken(t,M,l?l+a:a,c,p+M.length==m?u:"",f,s)}if(T>=k){v=v.slice(k-p),p=k;break}p=T,c=""}v=i.slice(o,o=r[g++]),l=st(r[g++],t.cm.options)}}else for(var N=1;N<r.length;N+=2)t.addToken(t,i.slice(o,o=r[N]),st(r[N+1],t.cm.options))}function gt(e,t,r){this.line=t,this.rest=de(t),this.size=this.rest?W(g(this.rest))-r+1:1,this.node=this.text=null,this.hidden=ve(e,t)}function vt(e,t,r){for(var n,i=[],o=t;o<r;o=n){var l=new gt(e.doc,M(e.doc,o),o);n=o+l.size,i.push(l)}return i}function mt(e){ys?ys.ops.push(e):e.ownsGroup=ys={ops:[e],delayedCallbacks:[]}}function yt(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}function bt(e,t){var r=e.ownsGroup;if(r)try{yt(r)}finally{ys=null,t(r)}}function wt(e,t){var r=Le(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);ys?n=ys.delayedCallbacks:bs?n=bs:(n=bs=[],setTimeout(xt,0));for(var o=0;o<r.length;++o)!function(e){n.push(function(){return r[e].apply(null,i)})}(o)}}function xt(){var e=bs;bs=null;for(var t=0;t<e.length;++t)e[t]()}function Ct(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?Tt(e,t):"gutter"==o?Nt(e,t,r,n):"class"==o?Mt(e,t):"widget"==o&&Ot(e,t,n)}t.changes=null}function St(e){return e.node==e.text&&(e.node=n("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),yl&&bl<8&&(e.node.style.zIndex=2)),e.node}function Lt(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var i=St(t);t.background=i.insertBefore(n("div",null,r),i.firstChild),e.display.input.setUneditable(t.background)}}function kt(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):at(e,t)}function Tt(e,t){var r=t.text.className,n=kt(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,Mt(e,t)):r&&(t.text.className=r)}function Mt(e,t){Lt(e,t),t.line.wrapClass?St(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function Nt(e,t,r,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=St(t);t.gutterBackground=n("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var s=St(t),a=t.gutter=n("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(a),s.insertBefore(a,t.text),t.line.gutterClass&&(a.className+=" "+t.line.gutterClass),!e.options.lineNumbers||l&&l["CodeMirror-linenumbers"]||(t.lineNumber=a.appendChild(n("div",F(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),l)for(var u=0;u<e.options.gutters.length;++u){var c=e.options.gutters[u],f=l.hasOwnProperty(c)&&l[c];f&&a.appendChild(n("div",[f],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function Ot(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);Wt(e,t,r)}function At(e,t,r,n){var i=kt(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),Mt(e,t),Nt(e,t,r,n),Wt(e,t,n),t.node}function Wt(e,t,r){if(Dt(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)Dt(e,t.rest[n],t,r,!1)}function Dt(e,t,r,i,o){if(t.widgets)for(var l=St(r),s=0,a=t.widgets;s<a.length;++s){var u=a[s],c=n("div",[u.node],"CodeMirror-linewidget");u.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Ht(u,c,r,i),e.display.input.setUneditable(c),o&&u.above?l.insertBefore(c,r.gutter||r.text):l.appendChild(c),wt(u,"redraw")}}function Ht(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}function Ft(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!o(document.body,e.node)){var i="position: relative;";e.coverGutter&&(i+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(i+="width: "+t.display.wrapper.clientWidth+"px;"),r(t.display.measure,n("div",[e.node],null,i))}return e.height=e.node.parentNode.offsetHeight}function Pt(e,t){for(var r=Pe(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function Et(e){return e.lineSpace.offsetTop}function zt(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function It(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=r(e.measure,n("pre","x")),i=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,o={left:parseInt(i.paddingLeft),right:parseInt(i.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(e.cachedPaddingH=o),o}function Rt(e){return Ul-e.display.nativeBarWidth}function Bt(e){return e.display.scroller.clientWidth-Rt(e)-e.display.barWidth}function Gt(e){return e.display.scroller.clientHeight-Rt(e)-e.display.barHeight}function Ut(e,t,r){var n=e.options.lineWrapping,i=n&&Bt(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),s=0;s<l.length-1;s++){var a=l[s],u=l[s+1];Math.abs(a.bottom-u.bottom)>2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}function Vt(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(W(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Kt(e,t){t=fe(t);var n=W(t),i=e.display.externalMeasured=new gt(e.doc,t,n);i.lineN=n;var o=i.built=at(e,i);return i.text=o.pre,r(e.display.lineMeasure,o.pre),i}function jt(e,t,r,n){return _t(e,Yt(e,t),r,n)}function Xt(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[kr(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Yt(e,t){var r=W(t),n=Xt(e,r);n&&!n.text?n=null:n&&n.changes&&(Ct(e,n,r,wr(e)),e.curOp.forceUpdate=!0),n||(n=Kt(e,t));var i=Vt(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function _t(e,t,r,n,i){t.before&&(r=-1);var o,l=r+(n||"");return t.cache.hasOwnProperty(l)?o=t.cache[l]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Ut(e,t.view,t.rect),t.hasHeights=!0),o=Zt(e,t,r,n),o.bogus||(t.cache[l]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}function qt(e,t,r){for(var n,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l="left"):t<a?(i=t-s,o=i+1):(u==e.length-3||t==a&&e[u+3]>t)&&(o=a-s,i=o-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],l="right";break}return{node:n,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function $t(e,t){var r=ws;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.right;i--);return r}function Zt(e,t,r,n){var i,o=qt(t.map,r,n),l=o.node,s=o.start,a=o.end,u=o.collapse
-;if(3==l.nodeType){for(var c=0;c<4;c++){for(;s&&S(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a<o.coverEnd&&S(t.line.text.charAt(o.coverStart+a));)++a;if(i=yl&&bl<9&&0==s&&a==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():$t(Fl(l,s,a).getClientRects(),n),i.left||i.right||0==s)break;a=s,s-=1,u="right"}yl&&bl<11&&(i=Qt(e.display.measure,i))}else{s>0&&(u=n="right");var f;i=e.options.lineWrapping&&(f=l.getClientRects()).length>1?f["right"==n?f.length-1:0]:l.getBoundingClientRect()}if(yl&&bl<9&&!s&&(!i||!i.left&&!i.right)){var h=l.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+br(e.display),top:h.top,bottom:h.bottom}:ws}for(var d=i.top-t.rect.top,p=i.bottom-t.rect.top,g=(d+p)/2,v=t.view.measure.heights,m=0;m<v.length-1&&!(g<v[m]);m++);var y=m?v[m-1]:0,b=v[m],w={left:("right"==u?i.right:i.left)-t.rect.left,right:("left"==u?i.left:i.right)-t.rect.left,top:y,bottom:b};return i.left||i.right||(w.bogus=!0),e.options.singleCursorHeightPerLine||(w.rtop=d,w.rbottom=p),w}function Qt(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Re(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}function Jt(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function er(e){e.display.externalMeasure=null,t(e.display.lineMeasure);for(var r=0;r<e.display.view.length;r++)Jt(e.display.view[r])}function tr(e){er(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function rr(){return Cl&&Nl?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function nr(){return Cl&&Nl?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function ir(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=Ft(e.widgets[r]));return t}function or(e,t,r,n,i){if(!i){var o=ir(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var l=ye(t);if("local"==n?l+=Et(e.display):l-=e.display.viewOffset,"page"==n||"window"==n){var s=e.display.lineSpace.getBoundingClientRect();l+=s.top+("window"==n?0:nr());var a=s.left+("window"==n?0:rr());r.left+=a,r.right+=a}return r.top+=l,r.bottom+=l,r}function lr(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=rr(),i-=nr();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:n-l.left,top:i-l.top}}function sr(e,t,r,n,i){return n||(n=M(e.doc,t.line)),or(e,n,jt(e,n,t.ch,i),r)}function ar(e,t,r,n,i,o){function l(t,l){var s=_t(e,i,t,l?"right":"left",o);return l?s.left=s.right:s.right=s.left,or(e,n,s,r)}function s(e,t,r){var n=a[t],i=1==n.level;return l(r?e-1:e,i!=r)}n=n||M(e.doc,t.line),i||(i=Yt(e,n));var a=Se(n,e.doc.direction),u=t.ch,c=t.sticky;if(u>=n.text.length?(u=n.text.length,c="before"):u<=0&&(u=0,c="after"),!a)return l("before"==c?u-1:u,"before"==c);var f=Ce(a,u,c),h=Ql,d=s(u,f,"before"==c);return null!=h&&(d.other=s(u,h,"before"!=c)),d}function ur(e,t){var r=0;t=U(e.doc,t),e.options.lineWrapping||(r=br(e.display)*t.ch);var n=M(e.doc,t.line),i=ye(n)+Et(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function cr(e,t,r,n,i){var o=P(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function fr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return cr(n.first,0,null,!0,-1);var i=D(n,r),o=n.first+n.size-1;if(i>o)return cr(n.first+n.size-1,M(n,o).text.length,null,!0,1);t<0&&(t=0);for(var l=M(n,i);;){var s=gr(e,l,i,t,r),a=ue(l),u=a&&a.find(0,!0);if(!a||!(s.ch>u.from.ch||s.ch==u.from.ch&&s.xRel>0))return s;i=W(l=u.to.line)}}function hr(e,t,r,n){n-=ir(t);var i=t.text.length,o=k(function(t){return _t(e,r,t-1).bottom<=n},i,0);return i=k(function(t){return _t(e,r,t).top>n},o,i),{begin:o,end:i}}function dr(e,t,r,n){return r||(r=Yt(e,t)),hr(e,t,r,or(e,t,_t(e,r,n),"line").top)}function pr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function gr(e,t,r,n,i){i-=ye(t);var o=Yt(e,t),l=ir(t),s=0,a=t.text.length,u=!0,c=Se(t,e.doc.direction);if(c){var f=(e.options.lineWrapping?mr:vr)(e,t,r,o,c,n,i);u=1!=f.level,s=u?f.from:f.to-1,a=u?f.to:f.from-1}var h,d,p=null,g=null,v=k(function(t){var r=_t(e,o,t);return r.top+=l,r.bottom+=l,!!pr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left<g.right-n,b=y==u;v=p+(b?0:1),d=b?"after":"before",h=y?g.left:g.right}else{u||v!=a&&v!=s||v++,d=0==v?"after":v==t.text.length?"before":_t(e,o,v-(u?1:0)).bottom+l<=i==u?"after":"before";var w=ar(e,P(r,v,d),"line",t,o);h=w.left,m=i<w.top||i>=w.bottom}return v=L(t.text,v,1),cr(r,v,d,m,n-h)}function vr(e,t,r,n,i,o,l){var s=k(function(s){var a=i[s],u=1!=a.level;return pr(ar(e,P(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=ar(e,P(r,u?a.from:a.to,u?"after":"before"),"line",t,n);pr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a}function mr(e,t,r,n,i,o,l){var s=hr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,f=null,h=0;h<i.length;h++){var d=i[h];if(!(d.from>=u||d.to<=a)){var p=1!=d.level,g=_t(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=g<o?o-g+1e9:g-o;(!c||f>v)&&(c=d,f=v)}}return c||(c=i[i.length-1]),c.from<a&&(c={from:a,to:c.to,level:c.level}),c.to>u&&(c={from:c.from,to:u,level:c.level}),c}function yr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==gs){gs=n("pre");for(var i=0;i<49;++i)gs.appendChild(document.createTextNode("x")),gs.appendChild(n("br"));gs.appendChild(document.createTextNode("x"))}r(e.measure,gs);var o=gs.offsetHeight/50;return o>3&&(e.cachedTextHeight=o),t(e.measure),o||1}function br(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=n("span","xxxxxxxxxx"),i=n("pre",[t]);r(e.measure,i);var o=t.getBoundingClientRect(),l=(o.right-o.left)/10;return l>2&&(e.cachedCharWidth=l),l||10}function wr(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)r[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[l]]=o.clientWidth;return{fixedPos:xr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function xr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Cr(e){var t=yr(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/br(e.display)-3);return function(i){if(ve(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return r?o+(Math.ceil(i.text.length/n)||1)*t:o+t}}function Sr(e){var t=e.doc,r=Cr(e);t.iter(function(e){var t=r(e);t!=e.height&&A(e,t)})}function Lr(e,t,r,n){var i=e.display;if(!r&&"true"==Pe(t).getAttribute("cm-not-content"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(t){return null}var a,u=fr(e,o,l);if(n&&1==u.xRel&&(a=M(e.doc,u.line).text).length==u.ch){var c=f(a,a.length,e.options.tabSize)-a.length;u=P(u.line,Math.max(0,Math.round((o-It(e.display).left)/br(e.display))-c))}return u}function kr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function Tr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Mr(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ranges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var a=s.empty();(a||e.options.showCursorWhenSelecting)&&Nr(e,s.head,i),a||Ar(e,s,o)}}return n}function Nr(e,t,r){var i=ar(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),o=r.appendChild(n("div"," ","CodeMirror-cursor"));if(o.style.left=i.left+"px",o.style.top=i.top+"px",o.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var l=r.appendChild(n("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Or(e,t){return e.top-t.top||e.left-t.left}function Ar(e,t,r){function i(e,t,r,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),a.appendChild(n("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==r?f-e:r)+"px;\n                             height: "+(i-t)+"px"))}function o(t,r,n){function o(r,n){return sr(e,P(t,r),"div",d,n)}function l(t,r,n){var i=dr(e,d,null,t),l="ltr"==r==("after"==n)?"left":"right";return o("after"==n?i.begin:i.end-(/\s/.test(d.text.charAt(i.end-1))?2:1),l)[l]}var a,u,d=M(s,t),p=d.text.length,g=Se(d,s.direction);return xe(g,r||0,null==n?p:n,function(e,t,s,d){var v="ltr"==s,m=o(e,v?"left":"right"),y=o(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==p,x=0==d,C=!g||d==g.length-1;if(y.top-m.top<=3){var S=(h?b:w)&&x,L=(h?w:b)&&C,k=S?c:(v?m:y).left,T=L?f:(v?y:m).right;i(k,m.top,T-k,m.bottom)}else{var M,N,O,A;v?(M=h&&b&&x?c:m.left,N=h?f:l(e,s,"before"),O=h?c:l(t,s,"after"),A=h&&w&&C?f:y.right):(M=h?l(e,s,"before"):c,N=!h&&b&&x?f:m.right,O=!h&&w&&C?c:y.left,A=h?l(t,s,"after"):f),i(M,m.top,N-M,m.bottom),m.bottom<y.top&&i(c,m.bottom,null,y.top),i(O,y.top,A-O,y.bottom)}(!a||Or(m,a)<0)&&(a=m),Or(y,a)<0&&(a=y),(!u||Or(m,u)<0)&&(u=m),Or(y,u)<0&&(u=y)}),{start:a,end:u}}var l=e.display,s=e.doc,a=document.createDocumentFragment(),u=It(e.display),c=u.left,f=Math.max(l.sizerWidth,Bt(e)-l.sizer.offsetLeft)-u.right,h="ltr"==s.direction,d=t.from(),p=t.to();if(d.line==p.line)o(d.line,d.ch,p.ch);else{var g=M(s,d.line),v=M(s,p.line),m=fe(g)==fe(v),y=o(d.line,d.ch,m?g.text.length+1:null).end,b=o(p.line,m?0:null,p.ch).start;m&&(y.top<b.top-2?(i(y.right,y.top,null,y.bottom),i(c,b.top,b.left,b.bottom)):i(y.right,y.top,b.left-y.right,y.bottom)),y.bottom<b.top&&i(c,y.bottom,null,b.top)}r.appendChild(a)}function Wr(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Dr(e){e.state.focused||(e.display.input.focus(),Fr(e))}function Hr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Pr(e))},100)}function Fr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(Te(e,"focus",e,t),e.state.focused=!0,s(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),wl&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Wr(e))}function Pr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(Te(e,"blur",e,t),e.state.focused=!1,zl(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Er(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(yl&&bl<8){var l=i.node.offsetTop+i.node.offsetHeight;o=l-r,r=l}else{var s=i.node.getBoundingClientRect();o=s.bottom-s.top}var a=i.line.height-o;if(o<2&&(o=yr(t)),(a>.005||a<-.005)&&(A(i.line,o),zr(i.line),i.rest))for(var u=0;u<i.rest.length;u++)zr(i.rest[u])}}}function zr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function Ir(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-Et(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=D(t,n),l=D(t,i);if(r&&r.ensure){var s=r.ensure.from.line,a=r.ensure.to.line;s<o?(o=s,l=D(t,ye(M(t,s))+e.wrapper.clientHeight)):Math.min(a,t.lastLine())>=l&&(o=D(t,ye(M(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Rr(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=xr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;l<r.length;l++)if(!r[l].hidden){e.options.fixedGutter&&(r[l].gutter&&(r[l].gutter.style.left=o),r[l].gutterBackground&&(r[l].gutterBackground.style.left=o));var s=r[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+"px")}}function Br(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=F(e.options,t.first+t.size-1),i=e.display;if(r.length!=i.lineNumChars){var o=i.measure.appendChild(n("div",[n("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),l=o.firstChild.offsetWidth,s=o.offsetWidth-l;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(l,i.lineGutter.offsetWidth-s)+1,i.lineNumWidth=i.lineNumInnerWidth+s,i.lineNumChars=i.lineNumInnerWidth?r.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Dn(e),!0}return!1}function Gr(e,t){if(!Me(e,"scrollCursorIntoView")){var r=e.display,i=r.sizer.getBoundingClientRect(),o=null;if(t.top+i.top<0?o=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Tl){var l=n("div","​",null,"position: absolute;\n                         top: "+(t.top-r.viewOffset-Et(e.display))+"px;\n                         height: "+(t.bottom-t.top+Rt(e)+r.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(o),e.display.lineSpace.removeChild(l)}}}function Ur(e,t,r,n){null==n&&(n=0);var i;e.options.lineWrapping||t!=r||(t=t.ch?P(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t,r="before"==t.sticky?P(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=ar(e,t),a=r&&r!=t?ar(e,r):s;i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n};var u=Kr(e,i),c=e.doc.scrollTop,f=e.doc.scrollLeft;if(null!=u.scrollTop&&(Zr(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Jr(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-f)>1&&(l=!0)),!l)break}return i}function Vr(e,t){var r=Kr(e,t);null!=r.scrollTop&&Zr(e,r.scrollTop),null!=r.scrollLeft&&Jr(e,r.scrollLeft)}function Kr(e,t){var r=e.display,n=yr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Gt(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+zt(r),a=t.top<n,u=t.bottom>s-n;if(t.top<i)l.scrollTop=a?0:t.top;else if(t.bottom>i+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,h=Bt(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>h;return d&&(t.right=t.left+h),t.left<10?l.scrollLeft=0:t.left<f?l.scrollLeft=Math.max(0,t.left-(d?0:10)):t.right>h+f-3&&(l.scrollLeft=t.right+(d?0:10)-h),l}function jr(e,t){null!=t&&(qr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Xr(e){qr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Yr(e,t,r){null==t&&null==r||qr(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function _r(e,t){qr(e),e.curOp.scrollToPos=t}function qr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;$r(e,ur(e,t.from),ur(e,t.to),t.margin)}}function $r(e,t,r,n){var i=Kr(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Yr(e,i.scrollLeft,i.scrollTop)}function Zr(e,t){Math.abs(e.doc.scrollTop-t)<2||(pl||An(e,{top:t}),Qr(e,t,!0),pl&&An(e),Sn(e,100))}function Qr(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Jr(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,Rr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function en(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+zt(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Rt(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}function tn(e,t){t||(t=en(e));var r=e.display.barWidth,n=e.display.barHeight;rn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Er(e),rn(e,en(e)),r=e.display.barWidth,n=e.display.barHeight}function rn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}function nn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&zl(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Ss[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ts(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Jr(e,t):Zr(e,t)},e),e.display.scrollbars.addClass&&s(e.display.wrapper,e.display.scrollbars.addClass)}function on(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ls},mt(e.curOp)}function ln(e){bt(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;sn(e)})}function sn(e){for(var t=e.ops,r=0;r<t.length;r++)an(t[r]);for(var n=0;n<t.length;n++)un(t[n]);for(var i=0;i<t.length;i++)cn(t[i]);for(var o=0;o<t.length;o++)fn(t[o]);for(var l=0;l<t.length;l++)hn(t[l])}function an(e){var t=e.cm,r=t.display;kn(t),e.updateMaxLine&&we(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<r.viewFrom||e.scrollToPos.to.line>=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ks(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function un(e){e.updatedDisplay=e.mustUpdate&&Nn(e.cm,e.update)}function cn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Er(t),e.barMeasure=en(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=jt(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Rt(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Bt(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function fn(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&Jr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==l();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&tn(t,e.barMeasure),e.updatedDisplay&&Hn(t,e.barMeasure),e.selectionChanged&&Wr(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&Dr(e.cm)}function hn(e){var t=e.cm,r=t.display,n=t.doc;if(e.updatedDisplay&&On(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&Qr(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&Jr(t,e.scrollLeft,!0,!0),e.scrollToPos){Gr(t,Ur(t,U(n,e.scrollToPos.from),U(n,e.scrollToPos.to),e.scrollToPos.margin))}var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l<i.length;++l)i[l].lines.length||Te(i[l],"hide");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&Te(o[s],"unhide");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&Te(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function dn(e,t){if(e.curOp)return t();on(e);try{return t()}finally{ln(e)}}function pn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);on(e);try{return t.apply(e,arguments)}finally{ln(e)}}}function gn(e){return function(){if(this.curOp)return e.apply(this,arguments);on(this);try{return e.apply(this,arguments)}finally{ln(this)}}}function vn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);on(t);try{return e.apply(this,arguments)}finally{ln(t)}}}function mn(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Zl&&pe(e.doc,t)<i.viewTo&&bn(e);else if(r<=i.viewFrom)Zl&&ge(e.doc,r+n)>i.viewFrom?bn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)bn(e);else if(t<=i.viewFrom){var o=wn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):bn(e)}else if(r>=i.viewTo){var l=wn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):bn(e)}else{var s=wn(e,t,t,-1),a=wn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(vt(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):bn(e)}var u=i.externalMeasured;u&&(r<u.lineN?u.lineN+=n:t<u.lineN+u.size&&(i.externalMeasured=null))}function yn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[kr(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==h(l,r)&&l.push(r)}}}function bn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function wn(e,t,r,n){var i,o=kr(e,t),l=e.display.view;if(!Zl||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(n>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;pe(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function xn(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=vt(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=vt(e,t,n.viewFrom).concat(n.view):n.viewFrom<t&&(n.view=n.view.slice(kr(e,t))),n.viewFrom=t,n.viewTo<r?n.view=n.view.concat(vt(e,n.viewTo,r)):n.viewTo>r&&(n.view=n.view.slice(0,kr(e,r)))),n.viewTo=r}function Cn(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function Sn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,u(Ln,e))}function Ln(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=$e(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?je(t.mode,n.state):null,a=_e(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var f=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),h=0;!f&&h<l.length;++h)f=l[h]!=o.styles[h];f&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&Ze(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return Sn(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&dn(e,function(){for(var t=0;t<i.length;t++)yn(e,i[t],"text")})}}function kn(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Rt(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Rt(e)+"px",t.scrollbarsClipped=!0)}function Tn(e){if(e.hasFocus())return null;var t=l();if(!t||!o(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&o(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}function Mn(e){if(e&&e.activeElt&&e.activeElt!=l()&&(e.activeElt.focus(),e.anchorNode&&o(document.body,e.anchorNode)&&o(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}function Nn(e,r){var n=e.display,i=e.doc;if(r.editorIsHidden)return bn(e),!1;if(!r.force&&r.visible.from>=n.viewFrom&&r.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Cn(e))return!1;Br(e)&&(bn(e),r.dims=wr(e));var o=i.first+i.size,l=Math.max(r.visible.from-e.options.viewportMargin,i.first),s=Math.min(o,r.visible.to+e.options.viewportMargin);n.viewFrom<l&&l-n.viewFrom<20&&(l=Math.max(i.first,n.viewFrom)),n.viewTo>s&&n.viewTo-s<20&&(s=Math.min(o,n.viewTo)),Zl&&(l=pe(e.doc,l),s=ge(e.doc,s));var a=l!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=r.wrapperHeight||n.lastWrapWidth!=r.wrapperWidth;xn(e,l,s),n.viewOffset=ye(M(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var u=Cn(e);if(!a&&0==u&&!r.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Tn(e);return u>4&&(n.lineDiv.style.display="none"),Wn(e,n.updateLineNumbers,r.dims),u>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,Mn(c),t(n.cursorDiv),t(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=r.wrapperHeight,n.lastWrapWidth=r.wrapperWidth,Sn(e,400)),n.updateLineNumbers=null,!0}function On(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Bt(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+zt(e.display)-Gt(e),r.top)}),t.visible=Ir(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&Nn(e,t);n=!1){Er(e);var i=en(e);Tr(e),tn(e,i),Hn(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function An(e,t){var r=new ks(e,t);if(Nn(e,r)){Er(e),On(e,r);var n=en(e);Tr(e),tn(e,n),Hn(e,n),r.finish()}}function Wn(e,r,n){function i(t){var r=t.nextSibling;return wl&&Al&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var o=e.display,l=e.options.lineNumbers,s=o.lineDiv,a=s.firstChild,u=o.view,c=o.viewFrom,f=0;f<u.length;f++){var d=u[f];if(d.hidden);else if(d.node&&d.node.parentNode==s){for(;a!=d.node;)a=i(a);var p=l&&null!=r&&r<=c&&d.lineNumber;d.changes&&(h(d.changes,"gutter")>-1&&(p=!1),Ct(e,d,c,n)),p&&(t(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(F(e.options,c)))),a=d.node.nextSibling}else{var g=At(e,d,c,n);s.insertBefore(g,a)}c+=d.size}for(;a;)a=i(a)}function Dn(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function Hn(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Rt(e)+"px"}function Fn(e){var r=e.display.gutters,i=e.options.gutters;t(r);for(var o=0;o<i.length;++o){var l=i[o],s=r.appendChild(n("div",null,"CodeMirror-gutter "+l));"CodeMirror-linenumbers"==l&&(e.display.lineGutter=s,s.style.width=(e.display.lineNumWidth||1)+"px")}r.style.display=o?"":"none",Dn(e)}function Pn(e){var t=h(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function En(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function zn(e){var t=En(e);return t.x*=Ms,t.y*=Ms,t}function In(e,t){var r=En(t),n=r.x,i=r.y,o=e.display,l=o.scroller,s=l.scrollWidth>l.clientWidth,a=l.scrollHeight>l.clientHeight;if(n&&s||i&&a){if(i&&Al&&wl)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var f=0;f<c.length;f++)if(c[f].node==u){e.display.currentWheelTarget=u;break e}if(n&&!pl&&!Sl&&null!=Ms)return i&&a&&Zr(e,Math.max(0,l.scrollTop+i*Ms)),Jr(e,Math.max(0,l.scrollLeft+n*Ms)),(!i||i&&a)&&We(t),void(o.wheelStartX=null);if(i&&null!=Ms){var h=i*Ms,d=e.doc.scrollTop,p=d+o.wrapper.clientHeight;h<0?d=Math.max(0,d+h-50):p=Math.min(e.doc.height,p+h+50),An(e,{top:d,bottom:p})}Ts<20&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=n,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=l.scrollLeft-o.wheelStartX,t=l.scrollTop-o.wheelStartY,r=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,r&&(Ms=(Ms*Ts+r)/(Ts+1),++Ts)}},200)):(o.wheelDX+=n,o.wheelDY+=i))}}function Rn(e,t){var r=e[t];e.sort(function(e,t){return E(e.from(),t.from())}),t=h(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(E(o.to(),i.from())>=0){var l=B(o.from(),i.from()),s=R(o.to(),i.to()),a=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new Os(a?s:l,a?l:s))}}return new Ns(e,t)}function Bn(e,t){return new Ns([new Os(e,t||e)],0)}function Gn(e){return e.text?P(e.from.line+e.text.length-1,g(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Un(e,t){if(E(e,t.from)<0)return e;if(E(e,t.to)<=0)return Gn(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Gn(t).ch-t.to.ch),P(r,n)}function Vn(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new Os(Un(i.anchor,t),Un(i.head,t)))}return Rn(r,e.sel.primIndex)}function Kn(e,t,r){return e.line==t.line?P(r.line,e.ch-t.ch+r.ch):P(r.line+(e.line-t.line),e.ch)}function jn(e,t,r){for(var n=[],i=P(e.first,0),o=i,l=0;l<t.length;l++){var s=t[l],a=Kn(s.from,i,o),u=Kn(Gn(s),i,o);if(i=s.to,o=u,"around"==r){var c=e.sel.ranges[l],f=E(c.head,c.anchor)<0;n[l]=new Os(f?u:a,f?a:u)}else n[l]=new Os(a,a)}return new Ns(n,e.sel.primIndex)}function Xn(e){e.doc.mode=Ve(e.options,e.doc.modeOption),Yn(e)}function Yn(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Sn(e,100),
-e.state.modeGen++,e.curOp&&mn(e)}function _n(e,t){return 0==t.from.ch&&0==t.to.ch&&""==g(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function qn(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){ot(e,r,i,n),wt(e,"change",e,t)}function l(e,t){for(var r=[],o=e;o<t;++o)r.push(new ps(u[o],i(o),n));return r}var s=t.from,a=t.to,u=t.text,c=M(e,s.line),f=M(e,a.line),h=g(u),d=i(u.length-1),p=a.line-s.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(_n(e,t)){var v=l(0,u.length-1);o(f,f.text,d),p&&e.remove(s.line,p),v.length&&e.insert(s.line,v)}else if(c==f)if(1==u.length)o(c,c.text.slice(0,s.ch)+h+c.text.slice(a.ch),d);else{var m=l(1,u.length-1);m.push(new ps(h+c.text.slice(a.ch),d,n)),o(c,c.text.slice(0,s.ch)+u[0],i(0)),e.insert(s.line+1,m)}else if(1==u.length)o(c,c.text.slice(0,s.ch)+u[0]+f.text.slice(a.ch),i(0)),e.remove(s.line+1,p);else{o(c,c.text.slice(0,s.ch)+u[0],i(0)),o(f,h+f.text.slice(a.ch),d);var y=l(1,u.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,y)}wt(e,"change",e,t)}function $n(e,t,r){function n(e,i,o){if(e.linked)for(var l=0;l<e.linked.length;++l){var s=e.linked[l];if(s.doc!=i){var a=o&&s.sharedHist;r&&!a||(t(s.doc,a),n(s.doc,e,a))}}}n(e,null,!0)}function Zn(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Sr(e),Xn(e),Qn(e),e.options.lineWrapping||we(e),e.options.mode=t.modeOption,mn(e)}function Qn(e){("rtl"==e.doc.direction?s:zl)(e.display.lineDiv,"CodeMirror-rtl")}function Jn(e){dn(e,function(){Qn(e),mn(e)})}function ei(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function ti(e,t){var r={from:I(t.from),to:Gn(t),text:N(e,t.from,t.to)};return ai(e,r,t.from.line,t.to.line+1),$n(e,function(e){return ai(e,r,t.from.line,t.to.line+1)},!0),r}function ri(e){for(;e.length;){if(!g(e).ranges)break;e.pop()}}function ni(e,t){return t?(ri(e.done),g(e.done)):e.done.length&&!g(e.done).ranges?g(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),g(e.done)):void 0}function ii(e,t,r,n){var i=e.history;i.undone.length=0;var o,l,s=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>s-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=ni(i,i.lastOp==n)))l=g(o.changes),0==E(t.from,t.to)&&0==E(t.from,l.to)?l.to=Gn(t):o.changes.push(ti(e,t));else{var a=g(i.done);for(a&&a.ranges||si(e.sel,i.done),o={changes:[ti(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||Te(e,"historyAdded")}function oi(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function li(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||oi(e,o,g(i.done),t))?i.done[i.done.length-1]=t:si(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&ri(i.undone)}function si(e,t){var r=g(t);r&&r.ranges&&r.equals(e)||t.push(e)}function ai(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function ui(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function ci(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(ui(r[i]));return n}function fi(e,t){var r=ci(e,t),n=J(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],l=n[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(r[i]=l)}return r}function hi(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?Ns.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];n.push({changes:s});for(var a=0;a<l.length;++a){var u=l[a],c=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var f in u)(c=f.match(/^spans_(\d+)$/))&&h(t,Number(c[1]))>-1&&(g(s)[f]=u[f],delete u[f])}}}return n}function di(e,t,r,n){if(n){var i=e.anchor;if(r){var o=E(t,i)<0;o!=E(r,i)<0?(i=t,t=r):o!=E(t,r)<0&&(t=r)}return new Os(i,t)}return new Os(r||t,t)}function pi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),wi(e,new Ns([di(e.sel.primary(),t,r,i)],0),n)}function gi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=di(e.sel.ranges[o],t[o],null,i);wi(e,Rn(n,e.sel.primIndex),r)}function vi(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,wi(e,Rn(i,e.sel.primIndex),n)}function mi(e,t,r,n){wi(e,Bn(t,r),n)}function yi(e,t,r){var n={ranges:t.ranges,update:function(t){var r=this;this.ranges=[];for(var n=0;n<t.length;n++)r.ranges[n]=new Os(U(e,t[n].anchor),U(e,t[n].head))},origin:r&&r.origin};return Te(e,"beforeSelectionChange",e,n),e.cm&&Te(e.cm,"beforeSelectionChange",e.cm,n),n.ranges!=t.ranges?Rn(n.ranges,n.ranges.length-1):t}function bi(e,t,r){var n=e.history.done,i=g(n);i&&i.ranges?(n[n.length-1]=t,xi(e,t,r)):wi(e,t,r)}function wi(e,t,r){xi(e,t,r),li(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function xi(e,t,r){(Oe(e,"beforeSelectionChange")||e.cm&&Oe(e.cm,"beforeSelectionChange"))&&(t=yi(e,t,r)),Ci(e,Li(e,t,r&&r.bias||(E(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Xr(e.cm)}function Ci(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,Ne(e.cm)),wt(e,"cursorActivity",e))}function Si(e){Ci(e,Li(e,e.sel,null,!1))}function Li(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Ti(e,l.anchor,s&&s.anchor,r,n),u=Ti(e,l.head,s&&s.head,r,n);(i||a!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new Os(a,u))}return i?Rn(i,t.primIndex):t}function ki(e,t,r,n,i){var o=M(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker;if((null==s.from||(a.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(a.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(i&&(Te(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var u=a.find(n<0?1:-1),c=void 0;if((n<0?a.inclusiveRight:a.inclusiveLeft)&&(u=Mi(e,u,-n,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=E(u,r))&&(n<0?c<0:c>0))return ki(e,u,t,n,i)}var f=a.find(n<0?-1:1);return(n<0?a.inclusiveLeft:a.inclusiveRight)&&(f=Mi(e,f,n,f.line==t.line?o:null)),f?ki(e,f,t,n,i):null}}return t}function Ti(e,t,r,n,i){var o=n||1,l=ki(e,t,r,o,i)||!i&&ki(e,t,r,o,!0)||ki(e,t,r,-o,i)||!i&&ki(e,t,r,-o,!0);return l||(e.cantEdit=!0,P(e.first,0))}function Mi(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?U(e,P(t.line-1)):null:r>0&&t.ch==(n||M(e,t.line)).text.length?t.line<e.first+e.size-1?P(t.line+1,0):null:new P(t.line,t.ch+r)}function Ni(e){e.setSelection(P(e.firstLine(),0),P(e.lastLine()),Kl)}function Oi(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=U(e,t)),r&&(n.to=U(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),Te(e,"beforeChange",e,n),e.cm&&Te(e.cm,"beforeChange",e.cm,n),n.canceled?null:{from:n.from,to:n.to,text:n.text,origin:n.origin}}function Ai(e,t,r){if(e.cm){if(!e.cm.curOp)return pn(e.cm,Ai)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(Oe(e,"beforeChange")||e.cm&&Oe(e.cm,"beforeChange"))||(t=Oi(e,t,!0))){var n=$l&&!r&&te(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)Wi(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else Wi(e,t)}}function Wi(e,t){if(1!=t.text.length||""!=t.text[0]||0!=E(t.from,t.to)){var r=Vn(e,t);ii(e,t,r,e.cm?e.cm.curOp.id:NaN),Fi(e,t,r,J(e,t));var n=[];$n(e,function(e,r){r||-1!=h(n,e.history)||(Ri(e.history,t),n.push(e.history)),Fi(e,t,null,J(e,t))})}}function Di(e,t,r){if(!e.cm||!e.cm.state.suppressEdits||r){for(var n,i=e.history,o=e.sel,l="undo"==t?i.done:i.undone,s="undo"==t?i.undone:i.done,a=0;a<l.length&&(n=l[a],r?!n.ranges||n.equals(e.sel):n.ranges);a++);if(a!=l.length){for(i.lastOrigin=i.lastSelOrigin=null;n=l.pop(),n.ranges;){if(si(n,s),r&&!n.equals(e.sel))return void wi(e,n,{clearRedo:!1});o=n}var u=[];si(o,s),s.push({changes:u,generation:i.generation}),i.generation=n.generation||++i.maxGeneration;for(var c=Oe(e,"beforeChange")||e.cm&&Oe(e.cm,"beforeChange"),f=n.changes.length-1;f>=0;--f){var d=function(r){var i=n.changes[r];if(i.origin=t,c&&!Oi(e,i,!1))return l.length=0,{};u.push(ti(e,i));var o=r?Vn(e,i):g(l);Fi(e,i,o,fi(e,i)),!r&&e.cm&&e.cm.scrollIntoView({from:i.from,to:Gn(i)});var s=[];$n(e,function(e,t){t||-1!=h(s,e.history)||(Ri(e.history,i),s.push(e.history)),Fi(e,i,null,fi(e,i))})}(f);if(d)return d.v}}}}function Hi(e,t){if(0!=t&&(e.first+=t,e.sel=new Ns(v(e.sel.ranges,function(e){return new Os(P(e.anchor.line+t,e.anchor.ch),P(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){mn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)yn(e.cm,n,"gutter")}}function Fi(e,t,r,n){if(e.cm&&!e.cm.curOp)return pn(e.cm,Fi)(e,t,r,n);if(t.to.line<e.first)return void Hi(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);Hi(e,i),t={from:P(e.first,0),to:P(t.to.line+i,t.to.ch),text:[g(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:P(o,M(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=N(e,t.from,t.to),r||(r=Vn(e,t)),e.cm?Pi(e.cm,t,n):qn(e,t,n),xi(e,r,Kl)}}function Pi(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=W(fe(M(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0})),n.sel.contains(t.from,t.to)>-1&&Ne(e),qn(n,t,r,Cr(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=be(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),it(n,o.line),Sn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?mn(e):o.line!=l.line||1!=t.text.length||_n(e.doc,t)?mn(e,o.line,l.line+1,u):yn(e,o.line,"text");var c=Oe(e,"changes"),f=Oe(e,"change");if(f||c){var h={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};f&&wt(e,"change",e,h),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function Ei(e,t,r,n,i){if(n||(n=r),E(n,r)<0){var o;o=[n,r],r=o[0],n=o[1]}"string"==typeof t&&(t=e.splitLines(t)),Ai(e,{from:r,to:n,text:t,origin:i})}function zi(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function Ii(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||(o=e[i]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)zi(o.ranges[s].anchor,t,r,n),zi(o.ranges[s].head,t,r,n)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(r<u.from.line)u.from=P(u.from.line+n,u.from.ch),u.to=P(u.to.line+n,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function Ri(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;Ii(e.done,r,n,i),Ii(e.undone,r,n,i)}function Bi(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=M(e,G(e,t)):i=W(t),null==i?null:(n(o,i)&&e.cm&&yn(e.cm,i,r),o)}function Gi(e){var t=this;this.lines=e,this.parent=null;for(var r=0,n=0;n<e.length;++n)e[n].parent=t,r+=e[n].height;this.height=r}function Ui(e){var t=this;this.children=e;for(var r=0,n=0,i=0;i<e.length;++i){var o=e[i];r+=o.chunkSize(),n+=o.height,o.parent=t}this.size=r,this.height=n,this.parent=null}function Vi(e,t,r){ye(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&jr(e,r)}function Ki(e,t,r,n){var i=new As(e,r,n),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),Bi(e,t,"widget",function(t){var r=t.widgets||(t.widgets=[]);if(null==i.insertAt?r.push(i):r.splice(Math.min(r.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!ve(e,t)){var n=ye(t)<e.scrollTop;A(t,t.height+Ft(i)),n&&jr(o,i.height),o.curOp.forceUpdate=!0}return!0}),wt(o,"lineWidgetAdded",o,i,"number"==typeof t?t:W(t)),i}function ji(e,t,r,n,o){if(n&&n.shared)return Xi(e,t,r,n,o);if(e.cm&&!e.cm.curOp)return pn(e.cm,ji)(e,t,r,n,o);var l=new Ds(e,o),s=E(t,r);if(n&&c(n,l,!1),s>0||0==s&&!1!==l.clearWhenEmpty)return l;if(l.replacedWith&&(l.collapsed=!0,l.widgetNode=i("span",[l.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||l.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(l.widgetNode.insertLeft=!0)),l.collapsed){if(ce(e,t.line,t,r,l)||t.line!=r.line&&ce(e,r.line,t,r,l))throw new Error("Inserting collapsed marker partially overlapping an existing one");X()}l.addToHistory&&ii(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var a,u=t.line,f=e.cm;if(e.iter(u,r.line+1,function(e){f&&l.collapsed&&!f.options.lineWrapping&&fe(e)==f.display.maxLine&&(a=!0),l.collapsed&&u!=t.line&&A(e,0),$(e,new Y(l,u==t.line?t.ch:null,u==r.line?r.ch:null)),++u}),l.collapsed&&e.iter(t.line,r.line+1,function(t){ve(e,t)&&A(t,0)}),l.clearOnEnter&&ts(l,"beforeCursorEnter",function(){return l.clear()}),l.readOnly&&(j(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),l.collapsed&&(l.id=++Ws,l.atomic=!0),f){if(a&&(f.curOp.updateMaxLine=!0),l.collapsed)mn(f,t.line,r.line+1);else if(l.className||l.title||l.startStyle||l.endStyle||l.css)for(var h=t.line;h<=r.line;h++)yn(f,h,"text");l.atomic&&Si(f.doc),wt(f,"markerAdded",f,l)}return l}function Xi(e,t,r,n,i){n=c(n),n.shared=!1;var o=[ji(e,t,r,n,i)],l=o[0],s=n.widgetNode;return $n(e,function(e){s&&(n.widgetNode=s.cloneNode(!0)),o.push(ji(e,U(e,t),U(e,r),n,i));for(var a=0;a<e.linked.length;++a)if(e.linked[a].isParent)return;l=g(o)}),new Hs(o,l)}function Yi(e){return e.findMarks(P(e.first,0),e.clipPos(P(e.lastLine())),function(e){return e.parent})}function _i(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(E(o,l)){var s=ji(e,o,l,n.primary,n.primary.type);n.markers.push(s),s.parent=n}}}function qi(e){for(var t=0;t<e.length;t++)!function(t){var r=e[t],n=[r.primary.doc];$n(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==h(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}}(t)}function $i(e){var t=this;if(Ji(t),!Me(t,e)&&!Pt(t.display,e)){We(e),yl&&(Es=+new Date);var r=Lr(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),l=0,s=0;s<i;++s)!function(e,n){if(!t.options.allowDropFileTypes||-1!=h(t.options.allowDropFileTypes,e.type)){var s=new FileReader;s.onload=pn(t,function(){var e=s.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[n]=e,++l==i){r=U(t.doc,r);var a={from:r,to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Ai(t.doc,a),bi(t.doc,Bn(r,Gn(a)))}}),s.readAsText(e)}}(n[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var a=e.dataTransfer.getData("Text");if(a){var u;if(t.state.draggingText&&!t.state.draggingText.copy&&(u=t.listSelections()),xi(t.doc,Bn(r,r)),u)for(var c=0;c<u.length;++c)Ei(t.doc,"",u[c].anchor,u[c].head,"drag");t.replaceSelection(a,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Zi(e,t){if(yl&&(!e.state.draggingText||+new Date-Es<100))return void Fe(t);if(!Me(e,t)&&!Pt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Ll)){var r=n("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Sl&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),Sl&&r.parentNode.removeChild(r)}}function Qi(e,t){var i=Lr(e,t);if(i){var o=document.createDocumentFragment();Nr(e,i,o),e.display.dragCursor||(e.display.dragCursor=n("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),r(e.display.dragCursor,o)}}function Ji(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function eo(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}function to(){zs||(ro(),zs=!0)}function ro(){var e;ts(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,eo(no)},100))}),ts(window,"blur",function(){return eo(Pr)})}function no(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function io(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var r,n,i,o,l=0;l<t.length-1;l++){var s=t[l];if(/^(cmd|meta|m)$/i.test(s))o=!0;else if(/^a(lt)?$/i.test(s))r=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);i=!0}}return r&&(e="Alt-"+e),n&&(e="Ctrl-"+e),o&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function oo(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=v(r.split(" "),io),o=0;o<i.length;o++){var l=void 0,s=void 0;o==i.length-1?(s=i.join(" "),l=n):(s=i.slice(0,o+1).join(" "),l="...");var a=t[s];if(a){if(a!=l)throw new Error("Inconsistent bindings for "+s)}else t[s]=l}delete e[r]}for(var u in t)e[u]=t[u];return e}function lo(e,t,r,n){t=co(t);var i=t.call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return lo(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var l=lo(e,t.fallthrough[o],r,n);if(l)return l}}}function so(e){var t="string"==typeof e?e:Is[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function ao(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(Pl?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(Pl?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function uo(e,t){if(Sl&&34==e.keyCode&&e.char)return!1;var r=Is[e.keyCode];return null!=r&&!e.altGraphKey&&ao(r,e,t)}function co(e){return"string"==typeof e?Us[e]:e}function fo(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&E(o.from,g(n).to)<=0;){var l=n.pop();if(E(l.from,o.from)<0){o.from=l.from;break}}n.push(o)}dn(e,function(){for(var t=n.length-1;t>=0;t--)Ei(e.doc,"",n[t].from,n[t].to,"+delete");Xr(e)})}function ho(e,t,r){var n=L(e.text,t+r,r);return n<0||n>e.text.length?null:n}function po(e,t,r){var n=ho(e,t.ch,r);return null==n?null:new P(t.line,n,r<0?"after":"before")}function go(e,t,r,n,i){if(e){var o=Se(r,t.doc.direction);if(o){var l,s=i<0?g(o):o[0],a=i<0==(1==s.level),u=a?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=Yt(t,r);l=i<0?r.text.length-1:0;var f=_t(t,c,l).top;l=k(function(e){return _t(t,c,e).top==f},i<0==(1==s.level)?s.from:s.to-1,l),"before"==u&&(l=ho(r,l,1))}else l=i<0?s.to:s.from;return new P(n,l,u)}}return new P(n,i<0?r.text.length:0,i<0?"before":"after")}function vo(e,t,r,n){var i=Se(t,e.doc.direction);if(!i)return po(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=Ce(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from<r.ch))return po(t,r,n);var s,a=function(e,r){return ho(t,e instanceof P?e.ch:e,r)},u=function(r){return e.options.lineWrapping?(s=s||Yt(e,t),dr(e,t,s,r)):{begin:0,end:t.text.length}},c=u("before"==r.sticky?a(r,-1):r.ch);if("rtl"==e.doc.direction||1==l.level){var f=1==l.level==n<0,h=a(r,f?1:-1);if(null!=h&&(f?h<=l.to&&h<=c.end:h>=l.from&&h>=c.begin)){var d=f?"before":"after";return new P(r.line,h,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new P(r.line,a(e,1),"before"):new P(r.line,e,"after")};e>=0&&e<i.length;e+=t){var l=i[e],s=t>0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u<l.to)return o(u,s);if(u=s?l.from:a(l.to,-1),n.begin<=u&&u<n.end)return o(u,s)}},g=p(o+n,n,c);if(g)return g;var v=n>0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}function mo(e,t){var r=M(e.doc,t),n=fe(r);return n!=r&&(t=W(n)),go(!0,e,n,t,1)}function yo(e,t){var r=M(e.doc,t),n=he(r);return n!=r&&(t=W(n)),go(!0,e,r,t,-1)}function bo(e,t){var r=mo(e,t.line),n=M(e.doc,r.line),i=Se(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),l=t.line==r.line&&t.ch<=o&&t.ch;return P(r.line,l?0:o,r.sticky)}return r}function wo(e,t,r){if("string"==typeof t&&!(t=Vs[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=Vl}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}function xo(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=lo(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&lo(t,e.options.extraKeys,r,e)||lo(t,e.options.keyMap,r,e)}function Co(e,t,r,n){var i=e.state.keySeq;if(i){if(so(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Ks.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),So(e,i+" "+t,r,n))return!0}return So(e,t,r,n)}function So(e,t,r,n){var i=xo(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&wt(e,"keyHandled",e,t,r),"handled"!=i&&"multi"!=i||(We(r),Wr(e)),!!i}function Lo(e,t){var r=uo(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?Co(e,"Shift-"+r,t,function(t){return wo(e,t,!0)})||Co(e,r,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return wo(e,t)}):Co(e,r,t,function(t){return wo(e,t)}))}function ko(e,t,r){return Co(e,"'"+r+"'",t,function(t){return wo(e,t,!0)})}function To(e){var t=this;if(t.curOp.focus=l(),!Me(t,e)){yl&&bl<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=Lo(t,e);Sl&&(js=n?r:null,!n&&88==r&&!os&&(Al?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=r||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||Mo(t)}}function Mo(e){function t(e){18!=e.keyCode&&e.altKey||(zl(r,"CodeMirror-crosshair"),ke(document,"keyup",t),ke(document,"mouseover",t))}var r=e.display.lineDiv;s(r,"CodeMirror-crosshair"),ts(document,"keyup",t),ts(document,"mouseover",t)}function No(e){16==e.keyCode&&(this.doc.sel.shift=!1),Me(this,e)}function Oo(e){var t=this;if(!(Pt(t.display,e)||Me(t,e)||e.ctrlKey&&!e.altKey||Al&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(Sl&&r==js)return js=null,void We(e);if(!Sl||e.which&&!(e.which<10)||!Lo(t,e)){var i=String.fromCharCode(null==n?r:n);"\b"!=i&&(ko(t,e,i)||t.display.input.onKeyPress(e))}}}function Ao(e,t){var r=+new Date;return _s&&_s.compare(r,e,t)?(Ys=_s=null,"triple"):Ys&&Ys.compare(r,e,t)?(_s=new Xs(r,e,t),Ys=null,"double"):(Ys=new Xs(r,e,t),_s=null,"single")}function Wo(e){var t=this,r=t.display;if(!(Me(t,e)||r.activeTouch&&r.input.supportsTouch())){if(r.input.ensurePolled(),r.shift=e.shiftKey,Pt(r,e))return void(wl||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100)));if(!Bo(t,e)){var n=Lr(t,e),i=Ee(e),o=n?Ao(n,i):"single";window.focus(),1==i&&t.state.selectingText&&t.state.selectingText(e),n&&Do(t,i,n,o,e)||(1==i?n?Fo(t,n,o,e):Pe(e)==r.scroller&&We(e):2==i?(n&&pi(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(El?Go(t,e):Hr(t)))}}}function Do(e,t,r,n,i){var o="Click";return"double"==n?o="Double"+o:"triple"==n&&(o="Triple"+o),o=(1==t?"Left":2==t?"Middle":"Right")+o,Co(e,ao(o,i),i,function(t){if("string"==typeof t&&(t=Vs[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=Vl}finally{e.state.suppressEdits=!1}return n})}function Ho(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=Wl?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey),null==i.addNew&&(i.addNew=Al?r.metaKey:r.ctrlKey),null==i.moveOnDrag&&(i.moveOnDrag=!(Al?r.altKey:r.ctrlKey)),i}function Fo(e,t,r,n){yl?setTimeout(u(Dr,e),0):e.curOp.focus=l();var i,o=Ho(e,r,n),s=e.doc.sel;e.options.dragDrop&&rs&&!e.isReadOnly()&&"single"==r&&(i=s.contains(t))>-1&&(E((i=s.ranges[i]).from(),t)<0||t.xRel>0)&&(E(i.to(),t)>0||t.xRel<0)?Po(e,n,t,o):zo(e,n,t,o)}function Po(e,t,r,n){var i=e.display,o=!1,l=pn(e,function(t){wl&&(i.scroller.draggable=!1),e.state.draggingText=!1,ke(document,"mouseup",l),ke(document,"mousemove",s),ke(i.scroller,"dragstart",a),ke(i.scroller,"drop",l),o||(We(t),n.addNew||pi(e.doc,r,null,null,n.extend),wl||yl&&9==bl?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())}),s=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},a=function(){return o=!0};wl&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),ts(document,"mouseup",l),ts(document,"mousemove",s),ts(i.scroller,"dragstart",a),ts(i.scroller,"drop",l),Hr(e),setTimeout(function(){return i.input.focus()},20)}function Eo(e,t,r){if("char"==r)return new Os(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new Os(P(t.line,0),U(e.doc,P(t.line+1,0)));var n=r(e,t);return new Os(n.from,n.to)}function zo(e,t,r,n){function i(t){if(0!=E(m,t))if(m=t,"rectangle"==n.unit){for(var i=[],o=e.options.tabSize,l=f(M(u,r.line).text,r.ch,o),s=f(M(u,t.line).text,t.ch,o),a=Math.min(l,s),g=Math.max(l,s),v=Math.min(r.line,t.line),y=Math.min(e.lastLine(),Math.max(r.line,t.line));v<=y;v++){var b=M(u,v).text,w=d(b,a,o);a==g?i.push(new Os(P(v,w),P(v,w))):b.length>w&&i.push(new Os(P(v,w),P(v,d(b,g,o))))}i.length||i.push(new Os(r,r)),wi(u,Rn(p.ranges.slice(0,h).concat(i),h),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var x,C=c,S=Eo(e,t,n.unit),L=C.anchor;E(S.anchor,L)>0?(x=S.head,L=B(C.from(),S.anchor)):(x=S.anchor,L=R(C.to(),S.head));var k=p.ranges.slice(0);k[h]=Io(e,new Os(U(u,L),x)),wi(u,Rn(k,h),jl)}}function o(t){var r=++b,s=Lr(e,t,!0,"rectangle"==n.unit);if(s)if(0!=E(s,m)){e.curOp.focus=l(),i(s);var c=Ir(a,u);(s.line>=c.to||s.line<c.from)&&setTimeout(pn(e,function(){b==r&&o(t)}),150)}else{var f=t.clientY<y.top?-20:t.clientY>y.bottom?20:0;f&&setTimeout(pn(e,function(){b==r&&(a.scroller.scrollTop+=f,o(t))}),50)}}function s(t){e.state.selectingText=!1,b=1/0,We(t),a.input.focus(),ke(document,"mousemove",w),ke(document,"mouseup",x),u.history.lastSelOrigin=null}var a=e.display,u=e.doc;We(t);var c,h,p=u.sel,g=p.ranges;if(n.addNew&&!n.extend?(h=u.sel.contains(r),c=h>-1?g[h]:new Os(r,r)):(c=u.sel.primary(),h=u.sel.primIndex),"rectangle"==n.unit)n.addNew||(c=new Os(r,r)),r=Lr(e,t,!0,!0),h=-1;else{var v=Eo(e,r,n.unit);c=n.extend?di(c,v.anchor,v.head,n.extend):v}n.addNew?-1==h?(h=g.length,wi(u,Rn(g.concat([c]),h),{scroll:!1,origin:"*mouse"})):g.length>1&&g[h].empty()&&"char"==n.unit&&!n.extend?(wi(u,Rn(g.slice(0,h).concat(g.slice(h+1)),0),{scroll:!1,origin:"*mouse"}),p=u.sel):vi(u,h,c,jl):(h=0,wi(u,new Ns([c],0),jl),p=u.sel);var m=r,y=a.wrapper.getBoundingClientRect(),b=0,w=pn(e,function(e){Ee(e)?o(e):s(e)}),x=pn(e,s);e.state.selectingText=x,ts(document,"mousemove",w),ts(document,"mouseup",x)}function Io(e,t){var r=t.anchor,n=t.head,i=M(e.doc,r.line);if(0==E(r,n)&&r.sticky==n.sticky)return t;var o=Se(i);if(!o)return t;var l=Ce(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==a||a==o.length)return t;var u;if(n.line!=r.line)u=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=Ce(o,n.ch,n.sticky),f=c-l||(n.ch-r.ch)*(1==s.level?-1:1);u=c==a-1||c==a?f<0:f>0}var h=o[a+(u?-1:0)],d=u==(1==h.level),p=d?h.from:h.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new Os(new P(r.line,p,g),n)}function Ro(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&We(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!Oe(e,r))return He(t);o-=s.top-l.viewOffset;for(var a=0;a<e.options.gutters.length;++a){var u=l.gutters.childNodes[a];if(u&&u.getBoundingClientRect().right>=i){return Te(e,r,e,D(e.doc,o),e.options.gutters[a],t),He(t)}}}function Bo(e,t){return Ro(e,t,"gutterClick",!0)}function Go(e,t){Pt(e.display,t)||Uo(e,t)||Me(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function Uo(e,t){return!!Oe(e,"gutterContextMenu")&&Ro(e,t,"gutterContextMenu",!1)}function Vo(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),tr(e)}function Ko(e){Fn(e),mn(e),Rr(e)}function jo(e,t,r){if(!t!=!(r&&r!=qs)){var n=e.display.dragFunctions,i=t?ts:ke;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Xo(e){e.options.lineWrapping?(s(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(zl(e.display.wrapper,"CodeMirror-wrap"),we(e)),Sr(e),mn(e),tr(e),setTimeout(function(){return tn(e)},100)}function Yo(e,t){var r=this;if(!(this instanceof Yo))return new Yo(e,t);this.options=t=t?c(t):{},c($s,t,!1),Pn(t);var n=t.value;"string"==typeof n&&(n=new Ps(n,t.mode,null,t.lineSeparator,t.direction)),this.doc=n;var i=new Yo.inputStyles[t.inputStyle](this),o=this.display=new T(e,n,i);o.wrapper.CodeMirror=this,Fn(this),Vo(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),nn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Rl,keySeq:null,specialChars:null},t.autofocus&&!Ol&&o.input.focus(),yl&&bl<11&&setTimeout(function(){return r.display.input.reset(!0)},20),_o(this),to(),on(this),this.curOp.forceUpdate=!0,Zn(this,n),t.autofocus&&!Ol||this.hasFocus()?setTimeout(u(Fr,this),20):Pr(this);for(var l in Zs)Zs.hasOwnProperty(l)&&Zs[l](r,t[l],qs);Br(this),t.finishInit&&t.finishInit(this);for(var s=0;s<Qs.length;++s)Qs[s](r);ln(this),wl&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}function _o(e){function t(){i.activeTouch&&(o=setTimeout(function(){return i.activeTouch=null},1e3),l=i.activeTouch,l.end=+new Date)}function r(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function n(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}var i=e.display;ts(i.scroller,"mousedown",pn(e,Wo)),yl&&bl<11?ts(i.scroller,"dblclick",pn(e,function(t){if(!Me(e,t)){var r=Lr(e,t);if(r&&!Bo(e,t)&&!Pt(e.display,t)){We(t);var n=e.findWordAt(r);pi(e.doc,n.anchor,n.head)}}})):ts(i.scroller,"dblclick",function(t){return Me(e,t)||We(t)}),El||ts(i.scroller,"contextmenu",function(t){return Go(e,t)});var o,l={end:0};ts(i.scroller,"touchstart",function(t){if(!Me(e,t)&&!r(t)&&!Bo(e,t)){i.input.ensurePolled(),clearTimeout(o);var n=+new Date;i.activeTouch={start:n,moved:!1,prev:n-l.end<=300?l:null},1==t.touches.length&&(i.activeTouch.left=t.touches[0].pageX,i.activeTouch.top=t.touches[0].pageY)}}),ts(i.scroller,"touchmove",function(){i.activeTouch&&(i.activeTouch.moved=!0)}),
-ts(i.scroller,"touchend",function(r){var o=i.activeTouch;if(o&&!Pt(i,r)&&null!=o.left&&!o.moved&&new Date-o.start<300){var l,s=e.coordsChar(i.activeTouch,"page");l=!o.prev||n(o,o.prev)?new Os(s,s):!o.prev.prev||n(o,o.prev.prev)?e.findWordAt(s):new Os(P(s.line,0),U(e.doc,P(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),We(r)}t()}),ts(i.scroller,"touchcancel",t),ts(i.scroller,"scroll",function(){i.scroller.clientHeight&&(Zr(e,i.scroller.scrollTop),Jr(e,i.scroller.scrollLeft,!0),Te(e,"scroll",e))}),ts(i.scroller,"mousewheel",function(t){return In(e,t)}),ts(i.scroller,"DOMMouseScroll",function(t){return In(e,t)}),ts(i.wrapper,"scroll",function(){return i.wrapper.scrollTop=i.wrapper.scrollLeft=0}),i.dragFunctions={enter:function(t){Me(e,t)||Fe(t)},over:function(t){Me(e,t)||(Qi(e,t),Fe(t))},start:function(t){return Zi(e,t)},drop:pn(e,$i),leave:function(t){Me(e,t)||Ji(e)}};var s=i.input.getField();ts(s,"keyup",function(t){return No.call(e,t)}),ts(s,"keydown",pn(e,To)),ts(s,"keypress",pn(e,Oo)),ts(s,"focus",function(t){return Fr(e,t)}),ts(s,"blur",function(t){return Pr(e,t)})}function qo(e,t,r,n){var i,o=e.doc;null==r&&(r="add"),"smart"==r&&(o.mode.indent?i=$e(e,t).state:r="prev");var l=e.options.tabSize,s=M(o,t),a=f(s.text,null,l);s.stateAfter&&(s.stateAfter=null);var u,c=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==r&&((u=o.mode.indent(i,s.text.slice(c.length),s.text))==Vl||u>150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?f(M(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",d=0;if(e.options.indentWithTabs)for(var g=Math.floor(u/l);g;--g)d+=l,h+="\t";if(d<u&&(h+=p(u-d)),h!=c)return Ei(o,h,P(t,0),P(t,c.length),"+input"),s.stateAfter=null,!0;for(var v=0;v<o.sel.ranges.length;v++){var m=o.sel.ranges[v];if(m.head.line==t&&m.head.ch<c.length){var y=P(t,c.length);vi(o,v,new Os(y,y));break}}}function $o(e){Js=e}function Zo(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var l=e.state.pasteIncoming||"paste"==i,s=ns(t),a=null;if(l&&n.ranges.length>1)if(Js&&Js.text.join("\n")==t){if(n.ranges.length%Js.text.length==0){a=[];for(var u=0;u<Js.text.length;u++)a.push(o.splitLines(Js.text[u]))}}else s.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(a=v(s,function(e){return[e]}));for(var c,f=n.ranges.length-1;f>=0;f--){var h=n.ranges[f],d=h.from(),p=h.to();h.empty()&&(r&&r>0?d=P(d.line,d.ch-r):e.state.overwrite&&!l?p=P(p.line,Math.min(M(o,p.line).text.length,p.ch+g(s).length)):Js&&Js.lineWise&&Js.text.join("\n")==t&&(d=p=P(d.line,0))),c=e.curOp.updateInput;var m={from:d,to:p,text:a?a[f%a.length]:s,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};Ai(e.doc,m),wt(e,"inputRead",e,m)}t&&!l&&Jo(e,t),Xr(e),e.curOp.updateInput=c,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Qo(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||dn(t,function(){return Zo(t,r,0,null,"paste")}),!0}function Jo(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){l=qo(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(M(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=qo(e,i.head.line,"smart"));l&&wt(e,"electricInput",e,i.head.line)}}}function el(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:P(i,0),head:P(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function tl(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function rl(){var e=n("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=n("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wl?e.style.width="1000px":e.setAttribute("wrap","off"),Ml&&(e.style.border="1px solid black"),tl(e),t}function nl(e,t,r,n,i){function o(){var n=t.line+r;return!(n<e.first||n>=e.first+e.size)&&(t=new P(n,t.ch,t.sticky),u=M(e,n))}function l(n){var l;if(null==(l=i?vo(e.cm,u,t,r):po(u,t,r))){if(n||!o())return!1;t=go(i,e.cm,u,t.line,r)}else t=l;return!0}var s=t,a=r,u=M(e,t.line);if("char"==n)l();else if("column"==n)l(!0);else if("word"==n||"group"==n)for(var c=null,f="group"==n,h=e.cm&&e.cm.getHelper(t,"wordChars"),d=!0;!(r<0)||l(!d);d=!1){var p=u.text.charAt(t.ch)||"\n",g=x(p,h)?"w":f&&"\n"==p?"n":!f||/\s/.test(p)?null:"p";if(!f||d||g||(g="s"),c&&c!=g){r<0&&(r=1,l(),t.sticky="after");break}if(g&&(c=g),r>0&&!l(!d))break}var v=Ti(e,t,s,a,!0);return z(s,v)&&(v.hitSide=!0),v}function il(e,t,r,n){var i,o=e.doc,l=t.left;if("page"==n){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),a=Math.max(s-.5*yr(e.display),3);i=(r>0?t.bottom:t.top)+r*a}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(var u;u=fr(e,l,i),u.outside;){if(r<0?i<=0:i>=o.height){u.hitSide=!0;break}i+=5*r}return u}function ol(e,t){var r=Xt(e,t.line);if(!r||r.hidden)return null;var n=M(e.doc,t.line),i=Vt(r,n,t.line),o=Se(n,e.doc.direction),l="left";if(o){l=Ce(o,t.ch)%2?"right":"left"}var s=qt(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function ll(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function sl(e,t){return t&&(e.bad=!0),e}function al(e,t,r,n,i){function o(e){return function(t){return t.id==e}}function l(){c&&(u+=f,c=!1)}function s(e){e&&(l(),u+=e)}function a(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(null!=r)return void s(r||t.textContent.replace(/\u200b/g,""));var u,h=t.getAttribute("cm-marker");if(h){var d=e.findMarks(P(n,0),P(i+1,0),o(+h));return void(d.length&&(u=d[0].find(0))&&s(N(e.doc,u.from,u.to).join(f)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p)$/i.test(t.nodeName);p&&l();for(var g=0;g<t.childNodes.length;g++)a(t.childNodes[g]);p&&(c=!0)}else 3==t.nodeType&&s(t.nodeValue)}for(var u="",c=!1,f=e.doc.lineSeparator();a(t),t!=r;)t=t.nextSibling;return u}function ul(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return sl(e.clipPos(P(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return cl(o,t,r)}}function cl(e,t,r){function n(t,r,n){for(var i=-1;i<(f?f.length:0);i++)for(var o=i<0?c.map:f[i],l=0;l<o.length;l+=3){var s=o[l+2];if(s==t||s==r){var a=W(i<0?e.line:e.rest[i]),u=o[l]+n;return(n<0||s!=t)&&(u=o[l+(n?1:0)]),P(a,u)}}}var i=e.text.firstChild,l=!1;if(!t||!o(i,t))return sl(P(W(e.line),0),!0);if(t==i&&(l=!0,t=i.childNodes[r],r=0,!t)){var s=e.rest?g(e.rest):e.line;return sl(P(W(s),s.text.length),l)}var a=3==t.nodeType?t:null,u=t;for(a||1!=t.childNodes.length||3!=t.firstChild.nodeType||(a=t.firstChild,r&&(r=a.nodeValue.length));u.parentNode!=i;)u=u.parentNode;var c=e.measure,f=c.maps,h=n(a,u,r);if(h)return sl(h,l);for(var d=u.nextSibling,p=a?a.nodeValue.length-r:0;d;d=d.nextSibling){if(h=n(d,d.firstChild,0))return sl(P(h.line,h.ch-p),l);p+=d.textContent.length}for(var v=u.previousSibling,m=r;v;v=v.previousSibling){if(h=n(v,v.firstChild,-1))return sl(P(h.line,h.ch+m),l);m+=v.textContent.length}}function fl(e,t){function r(){e.value=a.getValue()}if(t=t?c(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=l();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}var i;if(e.form&&(ts(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var s=o.submit=function(){r(),o.submit=i,o.submit(),o.submit=s}}catch(e){}}t.finishInit=function(t){t.save=r,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,r(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(ke(e.form,"submit",r),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var a=Yo(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return a}var hl=navigator.userAgent,dl=navigator.platform,pl=/gecko\/\d/i.test(hl),gl=/MSIE \d/.test(hl),vl=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(hl),ml=/Edge\/(\d+)/.exec(hl),yl=gl||vl||ml,bl=yl&&(gl?document.documentMode||6:+(ml||vl)[1]),wl=!ml&&/WebKit\//.test(hl),xl=wl&&/Qt\/\d+\.\d+/.test(hl),Cl=!ml&&/Chrome\//.test(hl),Sl=/Opera\//.test(hl),Ll=/Apple Computer/.test(navigator.vendor),kl=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(hl),Tl=/PhantomJS/.test(hl),Ml=!ml&&/AppleWebKit/.test(hl)&&/Mobile\/\w+/.test(hl),Nl=/Android/.test(hl),Ol=Ml||Nl||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(hl),Al=Ml||/Mac/.test(dl),Wl=/\bCrOS\b/.test(hl),Dl=/win/i.test(dl),Hl=Sl&&hl.match(/Version\/(\d*\.\d*)/);Hl&&(Hl=Number(Hl[1])),Hl&&Hl>=15&&(Sl=!1,wl=!0);var Fl,Pl=Al&&(xl||Sl&&(null==Hl||Hl<12.11)),El=pl||yl&&bl>=9,zl=function(t,r){var n=t.className,i=e(r).exec(n);if(i){var o=n.slice(i.index+i[0].length);t.className=n.slice(0,i.index)+(o?i[1]+o:"")}};Fl=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n};var Il=function(e){e.select()};Ml?Il=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:yl&&(Il=function(e){try{e.select()}catch(e){}});var Rl=function(){this.id=null};Rl.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var Bl,Gl,Ul=30,Vl={toString:function(){return"CodeMirror.Pass"}},Kl={scroll:!1},jl={origin:"*mouse"},Xl={origin:"+move"},Yl=[""],_l=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,ql=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,$l=!1,Zl=!1,Ql=null,Jl=function(){function e(e){return e<=247?r.charAt(e):1424<=e&&e<=1524?"R":1536<=e&&e<=1785?n.charAt(e-1536):1774<=e&&e<=2220?"r":8192<=e&&e<=8203?"w":8204==e?"b":"L"}function t(e,t,r){this.level=e,this.from=t,this.to=r}var r="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",n="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,l=/[LRr]/,s=/[Lb1n]/,a=/[1n]/;return function(r,n){var u="ltr"==n?"L":"R";if(0==r.length||"ltr"==n&&!i.test(r))return!1;for(var c=r.length,f=[],h=0;h<c;++h)f.push(e(r.charCodeAt(h)));for(var d=0,p=u;d<c;++d){var v=f[d];"m"==v?f[d]=p:p=v}for(var m=0,y=u;m<c;++m){var b=f[m];"1"==b&&"r"==y?f[m]="n":l.test(b)&&(y=b,"r"==b&&(f[m]="R"))}for(var w=1,x=f[0];w<c-1;++w){var C=f[w];"+"==C&&"1"==x&&"1"==f[w+1]?f[w]="1":","!=C||x!=f[w+1]||"1"!=x&&"n"!=x||(f[w]=x),x=C}for(var S=0;S<c;++S){var L=f[S];if(","==L)f[S]="N";else if("%"==L){var k=void 0;for(k=S+1;k<c&&"%"==f[k];++k);for(var T=S&&"!"==f[S-1]||k<c&&"1"==f[k]?"1":"N",M=S;M<k;++M)f[M]=T;S=k-1}}for(var N=0,O=u;N<c;++N){var A=f[N];"L"==O&&"1"==A?f[N]="L":l.test(A)&&(O=A)}for(var W=0;W<c;++W)if(o.test(f[W])){var D=void 0;for(D=W+1;D<c&&o.test(f[D]);++D);for(var H="L"==(W?f[W-1]:u),F="L"==(D<c?f[D]:u),P=H==F?H?"L":"R":u,E=W;E<D;++E)f[E]=P;W=D-1}for(var z,I=[],R=0;R<c;)if(s.test(f[R])){var B=R;for(++R;R<c&&s.test(f[R]);++R);I.push(new t(0,B,R))}else{var G=R,U=I.length;for(++R;R<c&&"L"!=f[R];++R);for(var V=G;V<R;)if(a.test(f[V])){G<V&&I.splice(U,0,new t(1,G,V));var K=V;for(++V;V<R&&a.test(f[V]);++V);I.splice(U,0,new t(2,K,V)),G=V}else++V;G<R&&I.splice(U,0,new t(1,G,R))}return"ltr"==n&&(1==I[0].level&&(z=r.match(/^\s+/))&&(I[0].from=z[0].length,I.unshift(new t(0,0,z[0].length))),1==g(I).level&&(z=r.match(/\s+$/))&&(g(I).to-=z[0].length,I.push(new t(0,c-z[0].length,c)))),"rtl"==n?I.reverse():I}}(),es=[],ts=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent("on"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||es).concat(r)}},rs=function(){if(yl&&bl<9)return!1;var e=n("div");return"draggable"in e||"dragDrop"in e}(),ns=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},is=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},os=function(){var e=n("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),ls=null,ss={},as={},us={},cs=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};cs.prototype.eol=function(){return this.pos>=this.string.length},cs.prototype.sol=function(){return this.pos==this.lineStart},cs.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},cs.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},cs.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},cs.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},cs.prototype.eatSpace=function(){for(var e=this,t=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++e.pos;return this.pos>t},cs.prototype.skipToEnd=function(){this.pos=this.string.length},cs.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},cs.prototype.backUp=function(e){this.pos-=e},cs.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=f(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?f(this.string,this.lineStart,this.tabSize):0)},cs.prototype.indentation=function(){return f(this.string,null,this.tabSize)-(this.lineStart?f(this.string,this.lineStart,this.tabSize):0)},cs.prototype.match=function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},cs.prototype.current=function(){return this.string.slice(this.start,this.pos)},cs.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},cs.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},cs.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var fs=function(e,t){this.state=e,this.lookAhead=t},hs=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};hs.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},hs.prototype.baseToken=function(e){var t=this;if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)t.baseTokenPos+=2;var r=this.baseTokens[this.baseTokenPos+1];return{type:r&&r.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},hs.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},hs.fromSaved=function(e,t,r){return t instanceof fs?new hs(e,je(e.mode,t.state),r,t.lookAhead):new hs(e,je(e.mode,t),r)},hs.prototype.save=function(e){var t=!1!==e?je(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new fs(t,this.maxLookAhead):t};var ds=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r},ps=function(e,t,r){this.text=e,ne(this,t),this.height=r?r(this):1};ps.prototype.lineNo=function(){return W(this)},Ae(ps);var gs,vs={},ms={},ys=null,bs=null,ws={left:0,right:0,top:0,bottom:0},xs=function(e,t,r){this.cm=r;var i=this.vert=n("div",[n("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=n("div",[n("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(i),e(o),ts(i,"scroll",function(){i.clientHeight&&t(i.scrollTop,"vertical")}),ts(o,"scroll",function(){o.clientWidth&&t(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,yl&&bl<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xs.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},xs.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xs.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xs.prototype.zeroWidthHack=function(){var e=Al&&!kl?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Rl,this.disableVert=new Rl},xs.prototype.enableZeroWidthBar=function(e,t,r){function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)}e.style.pointerEvents="auto",t.set(1e3,n)},xs.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Cs=function(){};Cs.prototype.update=function(){return{bottom:0,right:0}},Cs.prototype.setScrollLeft=function(){},Cs.prototype.setScrollTop=function(){},Cs.prototype.clear=function(){};var Ss={native:xs,null:Cs},Ls=0,ks=function(e,t,r){var n=e.display;this.viewport=t,this.visible=Ir(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Bt(e),this.force=r,this.dims=wr(e),this.events=[]};ks.prototype.signal=function(e,t){Oe(e,t)&&this.events.push(arguments)},ks.prototype.finish=function(){for(var e=this,t=0;t<this.events.length;t++)Te.apply(null,e.events[t])};var Ts=0,Ms=null;yl?Ms=-.53:pl?Ms=15:Cl?Ms=-.7:Ll&&(Ms=-1/3);var Ns=function(e,t){this.ranges=e,this.primIndex=t};Ns.prototype.primary=function(){return this.ranges[this.primIndex]},Ns.prototype.equals=function(e){var t=this;if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var r=0;r<this.ranges.length;r++){var n=t.ranges[r],i=e.ranges[r];if(!z(n.anchor,i.anchor)||!z(n.head,i.head))return!1}return!0},Ns.prototype.deepCopy=function(){for(var e=this,t=[],r=0;r<this.ranges.length;r++)t[r]=new Os(I(e.ranges[r].anchor),I(e.ranges[r].head));return new Ns(t,this.primIndex)},Ns.prototype.somethingSelected=function(){for(var e=this,t=0;t<this.ranges.length;t++)if(!e.ranges[t].empty())return!0;return!1},Ns.prototype.contains=function(e,t){var r=this;t||(t=e);for(var n=0;n<this.ranges.length;n++){var i=r.ranges[n];if(E(t,i.from())>=0&&E(e,i.to())<=0)return n}return-1};var Os=function(e,t){this.anchor=e,this.head=t};Os.prototype.from=function(){return B(this.anchor,this.head)},Os.prototype.to=function(){return R(this.anchor,this.head)},Os.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},Gi.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r=this,n=e,i=e+t;n<i;++n){var o=r.lines[n];r.height-=o.height,lt(o),wt(o,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){var n=this;this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var i=0;i<t.length;++i)t[i].parent=n},iterN:function(e,t,r){for(var n=this,i=e+t;e<i;++e)if(r(n.lines[e]))return!0}},Ui.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){var r=this;this.size-=t;for(var n=0;n<this.children.length;++n){var i=r.children[n],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e),s=i.height;if(i.removeInner(e,l),r.height-=s-i.height,o==l&&(r.children.splice(n--,1),i.parent=null),0==(t-=l))break;e=0}else e-=o}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof Gi))){var a=[];this.collapse(a),this.children=[new Gi(a)],this.children[0].parent=this}},collapse:function(e){for(var t=this,r=0;r<this.children.length;++r)t.children[r].collapse(e)},insertInner:function(e,t,r){var n=this;this.size+=t.length,this.height+=r;for(var i=0;i<this.children.length;++i){var o=n.children[i],l=o.chunkSize();if(e<=l){if(o.insertInner(e,t,r),o.lines&&o.lines.length>50){for(var s=o.lines.length%25+25,a=s;a<o.lines.length;){var u=new Gi(o.lines.slice(a,a+=25));o.height-=u.height,n.children.splice(++i,0,u),u.parent=n}o.lines=o.lines.slice(0,s),n.maybeSpill()}break}e-=l}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),r=new Ui(t);if(e.parent){e.size-=r.size,e.height-=r.height;var n=h(e.parent.children,e);e.parent.children.splice(n+1,0,r)}else{var i=new Ui(e.children);i.parent=e,e.children=[i,r],e=i}r.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=this,i=0;i<this.children.length;++i){var o=n.children[i],l=o.chunkSize();if(e<l){var s=Math.min(t,l-e);if(o.iterN(e,s,r))return!0;if(0==(t-=s))break;e=0}else e-=l}}};var As=function(e,t,r){var n=this;if(r)for(var i in r)r.hasOwnProperty(i)&&(n[i]=r[i]);this.doc=e,this.node=t};As.prototype.clear=function(){var e=this,t=this.doc.cm,r=this.line.widgets,n=this.line,i=W(n);if(null!=i&&r){for(var o=0;o<r.length;++o)r[o]==e&&r.splice(o--,1);r.length||(n.widgets=null);var l=Ft(this);A(n,Math.max(0,n.height-l)),t&&(dn(t,function(){Vi(t,n,-l),yn(t,i,"widget")}),wt(t,"lineWidgetCleared",t,this,i))}},As.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=Ft(this)-t;i&&(A(n,n.height+i),r&&dn(r,function(){r.curOp.forceUpdate=!0,Vi(r,n,i),wt(r,"lineWidgetChanged",r,e,W(n))}))},Ae(As);var Ws=0,Ds=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++Ws};Ds.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){var t=this.doc.cm,r=t&&!t.curOp;if(r&&on(t),Oe(this,"clear")){var n=this.find();n&&wt(this,"clear",n.from,n.to)}for(var i=null,o=null,l=0;l<this.lines.length;++l){var s=e.lines[l],a=_(s.markedSpans,e);t&&!e.collapsed?yn(t,W(s),"text"):t&&(null!=a.to&&(o=W(s)),null!=a.from&&(i=W(s))),s.markedSpans=q(s.markedSpans,a),null==a.from&&e.collapsed&&!ve(e.doc,s)&&t&&A(s,yr(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var u=0;u<this.lines.length;++u){var c=fe(e.lines[u]),f=be(c);f>t.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=f,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&mn(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Si(t.doc)),t&&wt(t,"markerCleared",t,this,i,o),r&&ln(t),this.parent&&this.parent.clear()}},Ds.prototype.find=function(e,t){var r=this;null==e&&"bookmark"==this.type&&(e=1);for(var n,i,o=0;o<this.lines.length;++o){var l=r.lines[o],s=_(l.markedSpans,r);if(null!=s.from&&(n=P(t?l:W(l),s.from),-1==e))return n;if(null!=s.to&&(i=P(t?l:W(l),s.to),1==e))return i}return n&&{from:n,to:i}},Ds.prototype.changed=function(){var e=this,t=this.find(-1,!0),r=this,n=this.doc.cm;t&&n&&dn(n,function(){var i=t.line,o=W(t.line),l=Xt(n,o);if(l&&(Jt(l),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!ve(r.doc,i)&&null!=r.height){var s=r.height;r.height=null;var a=Ft(r)-s;a&&A(i,i.height+a)}wt(n,"markerChanged",n,e)})},Ds.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=h(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},Ds.prototype.detachLine=function(e){if(this.lines.splice(h(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},Ae(Ds);var Hs=function(e,t){var r=this;this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=r};Hs.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var t=0;t<this.markers.length;++t)e.markers[t].clear();wt(this,"clear")}},Hs.prototype.find=function(e,t){return this.primary.find(e,t)},Ae(Hs);var Fs=0,Ps=function(e,t,r,n,i){if(!(this instanceof Ps))return new Ps(e,t,r,n,i);null==r&&(r=0),Ui.call(this,[new Gi([new ps("",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=P(r,0);this.sel=Bn(o),this.history=new ei(null),this.id=++Fs,this.modeOption=t,this.lineSep=n,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),qn(this,{from:o,to:o,text:e}),wi(this,Bn(o),Kl)};Ps.prototype=b(Ui.prototype,{constructor:Ps,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=O(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:vn(function(e){var t=P(this.first,0),r=this.first+this.size-1;Ai(this,{from:t,to:P(r,M(this,r).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Yr(this.cm,0,0),wi(this,Bn(t),Kl)}),replaceRange:function(e,t,r,n){t=U(this,t),r=r?U(this,r):t,Ei(this,e,t,r,n)},getRange:function(e,t,r){var n=N(this,U(this,e),U(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(H(this,e))return M(this,e)},getLineNumber:function(e){return W(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=M(this,e)),fe(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return U(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:vn(function(e,t,r){mi(this,U(this,"number"==typeof e?P(e,t||0):e),null,r)}),setSelection:vn(function(e,t,r){mi(this,U(this,e),U(this,t||e),r)}),extendSelection:vn(function(e,t,r){pi(this,U(this,e),t&&U(this,t),r)}),extendSelections:vn(function(e,t){gi(this,K(this,e),t)}),extendSelectionsBy:vn(function(e,t){gi(this,K(this,v(this.sel.ranges,e)),t)}),setSelections:vn(function(e,t,r){var n=this;if(e.length){for(var i=[],o=0;o<e.length;o++)i[o]=new Os(U(n,e[o].anchor),U(n,e[o].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),wi(this,Rn(i,t),r)}}),addSelection:vn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new Os(U(this,e),U(this,t||e))),wi(this,Rn(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this,n=this.sel.ranges,i=0;i<n.length;i++){var o=N(r,n[i].from(),n[i].to());t=t?t.concat(o):o}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=this,r=[],n=this.sel.ranges,i=0;i<n.length;i++){var o=N(t,n[i].from(),n[i].to());!1!==e&&(o=o.join(e||t.lineSeparator())),r[i]=o}return r},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||"+input")},replaceSelections:vn(function(e,t,r){for(var n=this,i=[],o=this.sel,l=0;l<o.ranges.length;l++){var s=o.ranges[l];i[l]={from:s.from(),to:s.to(),text:n.splitLines(e[l]),origin:r}}for(var a=t&&"end"!=t&&jn(this,i,t),u=i.length-1;u>=0;u--)Ai(n,i[u]);a?bi(this,a):this.cm&&Xr(this.cm)}),undo:vn(function(){Di(this,"undo")}),redo:vn(function(){Di(this,"redo")}),undoSelection:vn(function(){Di(this,"undo",!0)}),redoSelection:vn(function(){Di(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new ei(this.history.maxGeneration)},
-markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:hi(this.history.done),undone:hi(this.history.undone)}},setHistory:function(e){var t=this.history=new ei(this.history.maxGeneration);t.done=hi(e.done.slice(0),null,!0),t.undone=hi(e.undone.slice(0),null,!0)},setGutterMarker:vn(function(e,t,r){return Bi(this,e,"gutter",function(e){var n=e.gutterMarkers||(e.gutterMarkers={});return n[t]=r,!r&&C(n)&&(e.gutterMarkers=null),!0})}),clearGutter:vn(function(e){var t=this;this.iter(function(r){r.gutterMarkers&&r.gutterMarkers[e]&&Bi(t,r,"gutter",function(){return r.gutterMarkers[e]=null,C(r.gutterMarkers)&&(r.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!H(this,e))return null;if(t=e,!(e=M(this,e)))return null}else if(null==(t=W(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:vn(function(t,r,n){return Bi(this,t,"gutter"==r?"gutter":"class",function(t){var i="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass";if(t[i]){if(e(n).test(t[i]))return!1;t[i]+=" "+n}else t[i]=n;return!0})}),removeLineClass:vn(function(t,r,n){return Bi(this,t,"gutter"==r?"gutter":"class",function(t){var i="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass",o=t[i];if(!o)return!1;if(null==n)t[i]=null;else{var l=o.match(e(n));if(!l)return!1;var s=l.index+l[0].length;t[i]=o.slice(0,l.index)+(l.index&&s!=o.length?" ":"")+o.slice(s)||null}return!0})}),addLineWidget:vn(function(e,t,r){return Ki(this,e,t,r)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return ji(this,U(this,e),U(this,t),r,r&&r.type||"range")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=U(this,e),ji(this,e,e,r,"bookmark")},findMarksAt:function(e){e=U(this,e);var t=[],r=M(this,e.line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=U(this,e),t=U(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s<l.length;s++){var a=l[s];null!=a.to&&i==e.line&&e.ch>=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;n<r.length;++n)null!=r[n].from&&e.push(r[n].marker)}),e},posFromIndex:function(e){var t,r=this.first,n=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+n;if(o>e)return t=e,!0;e-=o,++r}),U(this,P(r,t))},indexFromPos:function(e){e=U(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new Ps(O(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new Ps(O(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],_i(n,Yi(this)),n},unlinkDoc:function(e){var t=this;if(e instanceof Yo&&(e=e.doc),this.linked)for(var r=0;r<this.linked.length;++r){var n=t.linked[r];if(n.doc==e){t.linked.splice(r,1),e.unlinkDoc(t),qi(Yi(t));break}}if(e.history==this.history){var i=[e.id];$n(e,function(e){return i.push(e.id)},!0),e.history=new ei(null),e.history.done=hi(this.history.done,i),e.history.undone=hi(this.history.undone,i)}},iterLinkedDocs:function(e){$n(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):ns(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:vn(function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Jn(this.cm))})}),Ps.prototype.eachLine=Ps.prototype.iter;for(var Es=0,zs=!1,Is={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Rs=0;Rs<10;Rs++)Is[Rs+48]=Is[Rs+96]=String(Rs);for(var Bs=65;Bs<=90;Bs++)Is[Bs]=String.fromCharCode(Bs);for(var Gs=1;Gs<=12;Gs++)Is[Gs+111]=Is[Gs+63235]="F"+Gs;var Us={};Us.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Us.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Us.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Us.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Us.default=Al?Us.macDefault:Us.pcDefault;var Vs={selectAll:Ni,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),Kl)},killLine:function(e){return fo(e,function(t){if(t.empty()){var r=M(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line<e.lastLine()?{from:t.head,to:P(t.head.line+1,0)}:{from:t.head,to:P(t.head.line,r)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return fo(e,function(t){return{from:P(t.from().line,0),to:U(e.doc,P(t.to().line+1,0))}})},delLineLeft:function(e){return fo(e,function(e){return{from:P(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return fo(e,function(t){var r=e.charCoords(t.head,"div").top+5;return{from:e.coordsChar({left:0,top:r},"div"),to:t.from()}})},delWrappedLineRight:function(e){return fo(e,function(t){var r=e.charCoords(t.head,"div").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(P(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(P(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return mo(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return bo(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return yo(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div")},Xl)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:r},"div")},Xl)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5,n=e.coordsChar({left:0,top:r},"div");return n.ch<e.getLine(n.line).search(/\S/)?bo(e,t.head):n},Xl)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),l=f(e.getLine(o.line),o.ch,n);t.push(p(n-l%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return dn(e,function(){for(var t=e.listSelections(),r=[],n=0;n<t.length;n++)if(t[n].empty()){var i=t[n].head,o=M(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new P(i.line,i.ch-1)),i.ch>0)i=new P(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),P(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=M(e.doc,i.line-1).text;l&&(i=new P(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),P(i.line-1,l.length-1),i,"+transpose"))}r.push(new Os(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return dn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n<t.length;n++)e.indentLine(t[n].from().line,null,!0);Xr(e)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}},Ks=new Rl,js=null,Xs=function(e,t,r){this.time=e,this.pos=t,this.button=r};Xs.prototype.compare=function(e,t,r){return this.time+400>e&&0==E(t,this.pos)&&r==this.button};var Ys,_s,qs={toString:function(){return"CodeMirror.Init"}},$s={},Zs={};Yo.defaults=$s,Yo.optionHandlers=Zs;var Qs=[];Yo.defineInitHook=function(e){return Qs.push(e)};var Js=null,ea=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Rl,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};ea.prototype.init=function(e){function t(e){if(!Me(i,e)){if(i.somethingSelected())$o({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=el(i);$o({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation(function(){i.setSelections(t.ranges,0,Kl),i.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var r=Js.text.join("\n");if(e.clipboardData.setData("Text",r),e.clipboardData.getData("Text")==r)return void e.preventDefault()}var l=rl(),s=l.firstChild;i.display.lineSpace.insertBefore(l,i.display.lineSpace.firstChild),s.value=Js.text.join("\n");var a=document.activeElement;Il(s),setTimeout(function(){i.display.lineSpace.removeChild(l),a.focus(),a==o&&n.showPrimarySelection()},50)}}var r=this,n=this,i=n.cm,o=n.div=e.lineDiv;tl(o,i.options.spellcheck),ts(o,"paste",function(e){Me(i,e)||Qo(e,i)||bl<=11&&setTimeout(pn(i,function(){return r.updateFromDOM()}),20)}),ts(o,"compositionstart",function(e){r.composing={data:e.data,done:!1}}),ts(o,"compositionupdate",function(e){r.composing||(r.composing={data:e.data,done:!1})}),ts(o,"compositionend",function(e){r.composing&&(e.data!=r.composing.data&&r.readFromDOMSoon(),r.composing.done=!0)}),ts(o,"touchstart",function(){return n.forceCompositionEnd()}),ts(o,"input",function(){r.composing||r.readFromDOMSoon()}),ts(o,"copy",t),ts(o,"cut",t)},ea.prototype.prepareSelection=function(){var e=Mr(this.cm,!1);return e.focus=this.cm.state.focused,e},ea.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},ea.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,r=t.doc.sel.primary(),n=r.from(),i=r.to();if(t.display.viewTo==t.display.viewFrom||n.line>=t.display.viewTo||i.line<t.display.viewFrom)return void e.removeAllRanges();var o=ul(t,e.anchorNode,e.anchorOffset),l=ul(t,e.focusNode,e.focusOffset);if(!o||o.bad||!l||l.bad||0!=E(B(o,l),n)||0!=E(R(o,l),i)){var s=t.display.view,a=n.line>=t.display.viewFrom&&ol(t,n)||{node:s[0].measure.map[2],offset:0},u=i.line<t.display.viewTo&&ol(t,i);if(!u){var c=s[s.length-1].measure,f=c.maps?c.maps[c.maps.length-1]:c.map;u={node:f[f.length-1],offset:f[f.length-2]-f[f.length-3]}}if(!a||!u)return void e.removeAllRanges();var h,d=e.rangeCount&&e.getRangeAt(0);try{h=Fl(a.node,a.offset,u.offset,u.node)}catch(e){}h&&(!pl&&t.state.focused?(e.collapse(a.node,a.offset),h.collapsed||(e.removeAllRanges(),e.addRange(h))):(e.removeAllRanges(),e.addRange(h)),d&&null==e.anchorNode?e.addRange(d):pl&&this.startGracePeriod()),this.rememberSelection()}},ea.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},ea.prototype.showMultipleSelections=function(e){r(this.cm.display.cursorDiv,e.cursors),r(this.cm.display.selectionDiv,e.selection)},ea.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},ea.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return o(this.div,t)},ea.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},ea.prototype.blur=function(){this.div.blur()},ea.prototype.getField=function(){return this.div},ea.prototype.supportsTouch=function(){return!0},ea.prototype.receivedFocus=function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():dn(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},ea.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},ea.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(Nl&&Cl&&this.cm.options.gutters.length&&ll(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=ul(t,e.anchorNode,e.anchorOffset),n=ul(t,e.focusNode,e.focusOffset);r&&n&&dn(t,function(){wi(t.doc,Bn(r,n),Kl),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},ea.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,r=e.doc.sel.primary(),n=r.from(),i=r.to();if(0==n.ch&&n.line>e.firstLine()&&(n=P(n.line-1,M(e.doc,n.line-1).length)),i.ch==M(e.doc,i.line).text.length&&i.line<e.lastLine()&&(i=P(i.line+1,0)),n.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o,l,s;n.line==t.viewFrom||0==(o=kr(e,n.line))?(l=W(t.view[0].line),s=t.view[0].node):(l=W(t.view[o].line),s=t.view[o-1].node.nextSibling);var a,u,c=kr(e,i.line);if(c==t.view.length-1?(a=t.viewTo-1,u=t.lineDiv.lastChild):(a=W(t.view[c+1].line)-1,u=t.view[c+1].node.previousSibling),!s)return!1;for(var f=e.doc.splitLines(al(e,s,u,l,a)),h=N(e.doc,P(l,0),P(a,M(e.doc,a).text.length));f.length>1&&h.length>1;)if(g(f)==g(h))f.pop(),h.pop(),a--;else{if(f[0]!=h[0])break;f.shift(),h.shift(),l++}for(var d=0,p=0,v=f[0],m=h[0],y=Math.min(v.length,m.length);d<y&&v.charCodeAt(d)==m.charCodeAt(d);)++d;for(var b=g(f),w=g(h),x=Math.min(b.length-(1==f.length?d:0),w.length-(1==h.length?d:0));p<x&&b.charCodeAt(b.length-p-1)==w.charCodeAt(w.length-p-1);)++p;if(1==f.length&&1==h.length&&l==n.line)for(;d&&d>n.ch&&b.charCodeAt(b.length-p-1)==w.charCodeAt(w.length-p-1);)d--,p++;f[f.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),f[0]=f[0].slice(d).replace(/\u200b+$/,"");var C=P(l,d),S=P(a,h.length?g(h).length-p:0);return f.length>1||f[0]||E(C,S)?(Ei(e.doc,f,C,S,"+input"),!0):void 0},ea.prototype.ensurePolled=function(){this.forceCompositionEnd()},ea.prototype.reset=function(){this.forceCompositionEnd()},ea.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},ea.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},ea.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||dn(this.cm,function(){return mn(e.cm)})},ea.prototype.setUneditable=function(e){e.contentEditable="false"},ea.prototype.onKeyPress=function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||pn(this.cm,Zo)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},ea.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},ea.prototype.onContextMenu=function(){},ea.prototype.resetPosition=function(){},ea.prototype.needsContentAttribute=!0;var ta=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new Rl,this.hasSelection=!1,this.composing=null};ta.prototype.init=function(e){function t(e){if(!Me(i,e)){if(i.somethingSelected())$o({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=el(i);$o({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,Kl):(n.prevInput="",l.value=t.text.join("\n"),Il(l))}"cut"==e.type&&(i.state.cutIncoming=!0)}}var r=this,n=this,i=this.cm,o=this.wrapper=rl(),l=this.textarea=o.firstChild;e.wrapper.insertBefore(o,e.wrapper.firstChild),Ml&&(l.style.width="0px"),ts(l,"input",function(){yl&&bl>=9&&r.hasSelection&&(r.hasSelection=null),n.poll()}),ts(l,"paste",function(e){Me(i,e)||Qo(e,i)||(i.state.pasteIncoming=!0,n.fastPoll())}),ts(l,"cut",t),ts(l,"copy",t),ts(e.scroller,"paste",function(t){Pt(e,t)||Me(i,t)||(i.state.pasteIncoming=!0,n.focus())}),ts(e.lineSpace,"selectstart",function(t){Pt(e,t)||We(t)}),ts(l,"compositionstart",function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),ts(l,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},ta.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=Mr(e);if(e.options.moveInputWithCursor){var i=ar(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},ta.prototype.showSelection=function(e){var t=this.cm,n=t.display;r(n.cursorDiv,e.cursors),r(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},ta.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&Il(this.textarea),yl&&bl>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",yl&&bl>=9&&(this.hasSelection=null))}},ta.prototype.getField=function(){return this.textarea},ta.prototype.supportsTouch=function(){return!1},ta.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Ol||l()!=this.textarea))try{this.textarea.focus()}catch(e){}},ta.prototype.blur=function(){this.textarea.blur()},ta.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},ta.prototype.receivedFocus=function(){this.slowPoll()},ta.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},ta.prototype.fastPoll=function(){function e(){r.poll()||t?(r.pollingFast=!1,r.slowPoll()):(t=!0,r.polling.set(60,e))}var t=!1,r=this;r.pollingFast=!0,r.polling.set(20,e)},ta.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||is(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(yl&&bl>=9&&this.hasSelection===i||Al&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,s=Math.min(n.length,i.length);l<s&&n.charCodeAt(l)==i.charCodeAt(l);)++l;return dn(t,function(){Zo(t,i.slice(l),n.length-l,null,e.composing?"*compose":null),i.length>1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ta.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},ta.prototype.onKeyPress=function(){yl&&bl>=9&&(this.hasSelection=null),this.fastPoll()},ta.prototype.onContextMenu=function(e){function t(){if(null!=l.selectionStart){var e=i.somethingSelected(),t="​"+(e?l.value:"");l.value="⇚",l.value=t,n.prevInput=e?"":"​",l.selectionStart=1,l.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function r(){if(n.contextMenuPending=!1,n.wrapper.style.cssText=c,l.style.cssText=u,yl&&bl<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=a),null!=l.selectionStart){(!yl||yl&&bl<9)&&t();var e=0,r=function(){o.selForContextMenu==i.doc.sel&&0==l.selectionStart&&l.selectionEnd>0&&"​"==n.prevInput?pn(i,Ni)(i):e++<10?o.detectingSelectAll=setTimeout(r,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(r,200)}}var n=this,i=n.cm,o=i.display,l=n.textarea,s=Lr(i,e),a=o.scroller.scrollTop;if(s&&!Sl){i.options.resetSelectionOnContextMenu&&-1==i.doc.sel.contains(s)&&pn(i,wi)(i.doc,Bn(s),Kl);var u=l.style.cssText,c=n.wrapper.style.cssText;n.wrapper.style.cssText="position: absolute";var f=n.wrapper.getBoundingClientRect();l.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-f.top-5)+"px; left: "+(e.clientX-f.left-5)+"px;\n      z-index: 1000; background: "+(yl?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var h;if(wl&&(h=window.scrollY),o.input.focus(),wl&&window.scrollTo(null,h),o.input.reset(),i.somethingSelected()||(l.value=n.prevInput=" "),n.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),yl&&bl>=9&&t(),El){Fe(e);var d=function(){ke(window,"mouseup",d),setTimeout(r,20)};ts(window,"mouseup",d)}else setTimeout(r,50)}},ta.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},ta.prototype.setUneditable=function(){},ta.prototype.needsContentAttribute=!1,function(e){function t(t,n,i,o){e.defaults[t]=n,i&&(r[t]=o?function(e,t,r){r!=qs&&i(e,t,r)}:i)}var r=e.optionHandlers;e.defineOption=t,e.Init=qs,t("value","",function(e,t){return e.setValue(t)},!0),t("mode",null,function(e,t){e.doc.modeOption=t,Xn(e)},!0),t("indentUnit",2,Xn,!0),t("indentWithTabs",!1),t("smartIndent",!0),t("tabSize",4,function(e){Yn(e),tr(e),mn(e)},!0),t("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(P(n,o))}n++});for(var i=r.length-1;i>=0;i--)Ei(e.doc,t,r[i],P(r[i].line,r[i].ch+t.length))}}),t("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=qs&&e.refresh()}),t("specialCharPlaceholder",ut,function(e){return e.refresh()},!0),t("electricChars",!0),t("inputStyle",Ol?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),t("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t("rtlMoveVisually",!Dl),t("wholeLineUpdateBefore",!0),t("theme","default",function(e){Vo(e),Ko(e)},!0),t("keyMap","default",function(e,t,r){var n=co(t),i=r!=qs&&co(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),t("extraKeys",null),t("configureMouse",null),t("lineWrapping",!1,Xo,!0),t("gutters",[],function(e){Pn(e.options),Ko(e)},!0),t("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?xr(e.display)+"px":"0",e.refresh()},!0),t("coverGutterNextToScrollbar",!1,function(e){return tn(e)},!0),t("scrollbarStyle","native",function(e){nn(e),tn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t("lineNumbers",!1,function(e){Pn(e.options),Ko(e)},!0),t("firstLineNumber",1,Ko,!0),t("lineNumberFormatter",function(e){return e},Ko,!0),t("showCursorWhenSelecting",!1,Tr,!0),t("resetSelectionOnContextMenu",!0),t("lineWiseCopyCut",!0),t("pasteLinesPerSelection",!0),t("readOnly",!1,function(e,t){"nocursor"==t&&(Pr(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),t("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),t("dragDrop",!0,jo),t("allowDropFileTypes",null),t("cursorBlinkRate",530),t("cursorScrollMargin",0),t("cursorHeight",1,Tr,!0),t("singleCursorHeightPerLine",!0,Tr,!0),t("workTime",100),t("workDelay",100),t("flattenSpans",!0,Yn,!0),t("addModeClass",!1,Yn,!0),t("pollInterval",100),t("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),t("historyEventDelay",1250),t("viewportMargin",10,function(e){return e.refresh()},!0),t("maxHighlightLength",1e4,Yn,!0),t("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),t("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),t("autofocus",null),t("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(Yo),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&pn(this,t[e])(this,r,i),Te(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](co(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:gn(function(t,r){var n=t.token?t:e.getMode(this.options,t);if(n.startState)throw new Error("Overlays may not be stateful.");m(this.state.overlays,{mode:n,modeSpec:t,opaque:r&&r.opaque,priority:r&&r.priority||0},function(e){return e.priority}),this.state.modeGen++,mn(this)}),removeOverlay:gn(function(e){for(var t=this,r=this.state.overlays,n=0;n<r.length;++n){var i=r[n].modeSpec;if(i==e||"string"==typeof e&&i.name==e)return r.splice(n,1),t.state.modeGen++,void mn(t)}}),indentLine:gn(function(e,t,r){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),H(this.doc,e)&&qo(this,e,t,r)}),indentSelection:gn(function(e){for(var t=this,r=this.doc.sel.ranges,n=-1,i=0;i<r.length;i++){var o=r[i];if(o.empty())o.head.line>n&&(qo(t,o.head.line,e,!0),n=o.head.line,i==t.doc.sel.primIndex&&Xr(t));else{var l=o.from(),s=o.to(),a=Math.max(n,l.line);n=Math.min(t.lastLine(),s.line-(s.ch?0:1))+1;for(var u=a;u<n;++u)qo(t,u,e);var c=t.doc.sel.ranges;0==l.ch&&r.length==c.length&&c[i].from().ch>0&&vi(t.doc,i,new Os(l,c[i].to()),Kl)}}}),getTokenAt:function(e,t){return et(this,e,t)},getLineTokens:function(e,t){return et(this,P(e),t,!0)},getTokenTypeAt:function(e){e=U(this.doc,e);var t,r=qe(this,M(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]<o)){t=r[2*l+2];break}n=l+1}}var s=t?t.indexOf("overlay "):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(t){var r=this.doc.mode;return r.innerMode?e.innerMode(r,this.getTokenAt(t).state).mode:r},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=this,i=[];if(!r.hasOwnProperty(t))return i;var o=r[t],l=this.getModeAt(e);if("string"==typeof l[t])o[l[t]]&&i.push(o[l[t]]);else if(l[t])for(var s=0;s<l[t].length;s++){var a=o[l[t][s]];a&&i.push(a)}else l.helperType&&o[l.helperType]?i.push(o[l.helperType]):o[l.name]&&i.push(o[l.name]);for(var u=0;u<o._global.length;u++){var c=o._global[u];c.pred(l,n)&&-1==h(i,c.val)&&i.push(c.val)}return i},getStateAfter:function(e,t){var r=this.doc;return e=G(r,null==e?r.first+r.size-1:e),$e(this,e+1,t).state},cursorCoords:function(e,t){var r,n=this.doc.sel.primary()
-;return r=null==e?n.head:"object"==typeof e?U(this.doc,e):e?n.from():n.to(),ar(this,r,t||"page")},charCoords:function(e,t){return sr(this,U(this.doc,e),t||"page")},coordsChar:function(e,t){return e=lr(this,e,t||"page"),fr(this,e.left,e.top)},lineAtHeight:function(e,t){return e=lr(this,{top:e,left:0},t||"page").top,D(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),n=M(this.doc,e)}else n=e;return or(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-ye(n):0)},defaultTextHeight:function(){return yr(this.display)},defaultCharWidth:function(){return br(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o=this.display;e=ar(this,U(this.doc,e));var l=e.bottom,s=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==n)l=e.top;else if("above"==n||"near"==n){var a=Math.max(o.wrapper.clientHeight,this.doc.height),u=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>a)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=a&&(l=e.bottom),s+t.offsetWidth>u&&(s=u-t.offsetWidth)}t.style.top=l+"px",t.style.left=t.style.right="","right"==i?(s=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?s=0:"middle"==i&&(s=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+"px"),r&&Vr(this,{left:s,top:l,right:s+t.offsetWidth,bottom:l+t.offsetHeight})},triggerOnKeyDown:gn(To),triggerOnKeyPress:gn(Oo),triggerOnKeyUp:No,triggerOnMouseDown:gn(Wo),execCommand:function(e){if(Vs.hasOwnProperty(e))return Vs[e].call(null,this)},triggerElectric:gn(function(e){Jo(this,e)}),findPosH:function(e,t,r,n){var i=this,o=1;t<0&&(o=-1,t=-t);for(var l=U(this.doc,e),s=0;s<t&&(l=nl(i.doc,l,o,r,n),!l.hitSide);++s);return l},moveH:gn(function(e,t){var r=this;this.extendSelectionsBy(function(n){return r.display.shift||r.doc.extend||n.empty()?nl(r.doc,n.head,e,t,r.options.rtlMoveVisually):e<0?n.from():n.to()},Xl)}),deleteH:gn(function(e,t){var r=this.doc.sel,n=this.doc;r.somethingSelected()?n.replaceSelection("",null,"+delete"):fo(this,function(r){var i=nl(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,r,n){var i=this,o=1,l=n;t<0&&(o=-1,t=-t);for(var s=U(this.doc,e),a=0;a<t;++a){var u=ar(i,s,"div");if(null==l?l=u.left:u.left=l,s=il(i,u,o,r),s.hitSide)break}return s},moveV:gn(function(e,t){var r=this,n=this.doc,i=[],o=!this.display.shift&&!n.extend&&n.sel.somethingSelected();if(n.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var s=ar(r,l.head,"div");null!=l.goalColumn&&(s.left=l.goalColumn),i.push(s.left);var a=il(r,s,e,t);return"page"==t&&l==n.sel.primary()&&jr(r,sr(r,a,"div").top-s.top),a},Xl),i.length)for(var l=0;l<n.sel.ranges.length;l++)n.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=this.doc,r=M(t,e.line).text,n=e.ch,i=e.ch;if(r){var o=this.getHelper(e,"wordChars");"before"!=e.sticky&&i!=r.length||!n?++i:--n;for(var l=r.charAt(n),s=x(l,o)?function(e){return x(e,o)}:/\s/.test(l)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!x(e)};n>0&&s(r.charAt(n-1));)--n;for(;i<r.length&&s(r.charAt(i));)++i}return new Os(P(e.line,n),P(e.line,i))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?s(this.display.cursorDiv,"CodeMirror-overwrite"):zl(this.display.cursorDiv,"CodeMirror-overwrite"),Te(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==l()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:gn(function(e,t){Yr(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Rt(this)-this.display.barHeight,width:e.scrollWidth-Rt(this)-this.display.barWidth,clientHeight:Gt(this),clientWidth:Bt(this)}},scrollIntoView:gn(function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:P(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?_r(this,e):$r(this,e.from,e.to,e.margin)}),setSize:gn(function(e,t){var r=this,n=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&er(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){yn(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,Te(this,"refresh",this)}),operation:function(e){return dn(this,e)},startOperation:function(){return on(this)},endOperation:function(){return ln(this)},refresh:gn(function(){var e=this.display.cachedTextHeight;mn(this),this.curOp.forceUpdate=!0,tr(this),Yr(this,this.doc.scrollLeft,this.doc.scrollTop),Dn(this),(null==e||Math.abs(e-yr(this.display))>.5)&&Sr(this),Te(this,"refresh",this)}),swapDoc:gn(function(e){var t=this.doc;return t.cm=null,Zn(this,e),tr(this),this.display.input.reset(),Yr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,wt(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ae(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Yo);var ra="iter insert remove copy getEditor constructor".split(" ");for(var na in Ps.prototype)Ps.prototype.hasOwnProperty(na)&&h(ra,na)<0&&(Yo.prototype[na]=function(e){return function(){return e.apply(this.doc,arguments)}}(Ps.prototype[na]));return Ae(Ps),Yo.inputStyles={textarea:ta,contenteditable:ea},Yo.defineMode=function(e){Yo.defaults.mode||"null"==e||(Yo.defaults.mode=e),Be.apply(this,arguments)},Yo.defineMIME=Ge,Yo.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Yo.defineMIME("text/plain","null"),Yo.defineExtension=function(e,t){Yo.prototype[e]=t},Yo.defineDocExtension=function(e,t){Ps.prototype[e]=t},Yo.fromTextArea=fl,function(e){e.off=ke,e.on=ts,e.wheelEventPixels=zn,e.Doc=Ps,e.splitLines=ns,e.countColumn=f,e.findColumn=d,e.isWordChar=w,e.Pass=Vl,e.signal=Te,e.Line=ps,e.changeEnd=Gn,e.scrollbarModel=Ss,e.Pos=P,e.cmpPos=E,e.modes=ss,e.mimeModes=as,e.resolveMode=Ue,e.getMode=Ve,e.modeExtensions=us,e.extendMode=Ke,e.copyState=je,e.startState=Ye,e.innerMode=Xe,e.commands=Vs,e.keyMap=Us,e.keyName=uo,e.isModifierKey=so,e.lookupKey=lo,e.normalizeKeyMap=oo,e.StringStream=cs,e.SharedTextMarker=Hs,e.TextMarker=Ds,e.LineWidget=As,e.e_preventDefault=We,e.e_stopPropagation=De,e.e_stop=Fe,e.addClass=s,e.contains=o,e.rmClass=zl,e.keyNames=Is}(Yo),Yo.version="5.32.0",Yo});
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css b/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
deleted file mode 100644
index 8b566dc..0000000
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
+++ /dev/null
@@ -1 +0,0 @@
-html{box-sizing:border-box}body{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}.ui-datatable .ui-sortable-column div.ui-dt-c{padding-right:15px!important}.mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font-size:11.62px}.mat-h5,.mat-h6,.mat-typography h5,.mat-typography h6{font-weight:400;font-family:Roboto,Helvetica Neue,sans-serif;line-height:20px;margin:0 0 12px}.mat-h6,.mat-typography h6{font-size:9.38px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,Helvetica Neue,sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-body-1 p,.mat-body p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,Helvetica Neue,sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:400}.mat-card-content,.mat-card-header .mat-card-title,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:13px;line-height:18px}.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-form-field{font-family:Roboto,Helvetica Neue,sans-serif;font-size:inherit;font-weight:400;line-height:1.125}.mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.4375em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333333%}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.28125em}.mat-form-field-underline{bottom:1.25em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.54166667em;top:calc(100% - 1.66666667em)}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-size:12px;font-weight:500}.mat-slider-thumb-label-text,.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group,.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;margin:0}.mat-tooltip{font-size:10px;padding-top:6px;padding-bottom:6px}.mat-list-item,.mat-list-option,.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{font-size:16px}.mat-list .mat-list-item .mat-line,.mat-nav-list .mat-list-item .mat-line,.mat-selection-list .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{font-size:16px}.mat-list .mat-list-option .mat-line,.mat-nav-list .mat-list-option .mat-line,.mat-selection-list .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list[dense] .mat-list-item,.mat-nav-list[dense] .mat-list-item,.mat-selection-list[dense] .mat-list-item{font-size:12px}.mat-list[dense] .mat-list-item .mat-line,.mat-nav-list[dense] .mat-list-item .mat-line,.mat-selection-list[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-list[dense] .mat-list-option,.mat-nav-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option,.mat-selection-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option{font-size:12px}.mat-list[dense] .mat-list-option .mat-line,.mat-nav-list[dense] .mat-list-option .mat-line,.mat-selection-list[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list[dense] .mat-subheader,.mat-nav-list[dense] .mat-subheader,.mat-selection-list[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-ripple{overflow:hidden}@media screen and (-ms-high-contrast:active){.mat-ripple{display:none}}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,-webkit-transform 0ms cubic-bezier(0,0,.2,1);transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transition:opacity,transform 0ms cubic-bezier(0,0,.2,1),-webkit-transform 0ms cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}.mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;position:relative;cursor:pointer;outline:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;max-width:100%;box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.mat-option-text{display:inline-block;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}@media screen and (-ms-high-contrast:active){.mat-option-ripple{opacity:.5}}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}.mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-global-overlay-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{box-sizing:border-box}.cdk-overlay-backdrop,.cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-backdrop{top:0;bottom:0;left:0;right:0;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.48}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.6)}.cdk-overlay-transparent-backdrop{background:none}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:focus:not(.mat-option-disabled),.mat-option:hover:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#9e9e9e}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ffab40}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-option.mat-active,.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate,.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate{background:#ffab40}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#9e9e9e}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button{background:transparent}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay{background-color:hsla(0,0%,62%,.12)}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay{background-color:rgba(255,171,64,.12)}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay{background-color:rgba(244,67,54,.12)}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary{color:#9e9e9e}.mat-button.mat-accent,.mat-icon-button.mat-accent{color:#ffab40}.mat-button.mat-warn,.mat-icon-button.mat-warn{color:#f44336}.mat-button.mat-accent[disabled],.mat-button.mat-primary[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled]{color:rgba(0,0,0,.38)}.mat-fab,.mat-mini-fab,.mat-raised-button{color:rgba(0,0,0,.87);background-color:#fff}.mat-fab.mat-accent,.mat-fab.mat-primary,.mat-mini-fab.mat-accent,.mat-mini-fab.mat-primary,.mat-raised-button.mat-accent,.mat-raised-button.mat-primary{color:rgba(0,0,0,.87)}.mat-fab.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{color:#fff}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{color:rgba(0,0,0,.38)}.mat-fab.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{background-color:#9e9e9e}.mat-fab.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{background-color:#ffab40}.mat-fab.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{background-color:#f44336}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{background-color:rgba(0,0,0,.12)}.mat-fab.mat-accent .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element{background-color:rgba(0,0,0,.2)}.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.2)}.mat-button.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.1)}.mat-button.mat-accent .mat-ripple-element{background-color:rgba(255,171,64,.1)}.mat-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.1)}.mat-icon-button.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.2)}.mat-icon-button.mat-accent .mat-ripple-element{background-color:rgba(255,171,64,.2)}.mat-icon-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.2)}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle.cdk-focused .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.06)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-disabled{background-color:#eee;color:rgba(0,0,0,.38)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa!important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-checked.mat-primary .mat-checkbox-background,.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#9e9e9e}.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#ffab40}.mat-checkbox-checked.mat-warn .mat-checkbox-background,.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:#b0b0b0}.mat-checkbox:not(.mat-checkbox-disabled).mat-primary .mat-checkbox-ripple .mat-ripple-element{background-color:hsla(0,0%,62%,.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(255,171,64,.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-warn .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}.mat-chip:not(.mat-basic-chip){background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip:not(.mat-basic-chip) .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip:not(.mat-basic-chip) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-primary{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-accent{background-color:#ffab40;color:rgba(0,0,0,.87)}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove:hover{opacity:.54}.mat-table{background:#fff}.mat-header-row,.mat-row{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell{color:rgba(0,0,0,.87)}.mat-datepicker-content{background-color:#fff;color:rgba(0,0,0,.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,.54)}.mat-calendar-next-button,.mat-calendar-previous-button{color:rgba(0,0,0,.54)}.mat-calendar-table-header{color:rgba(0,0,0,.38)}.mat-calendar-table-header-divider:after{background:rgba(0,0,0,.12)}.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(0,0,0,.38)}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,.04)}.mat-calendar-body-selected{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:hsla(0,0%,62%,.4)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.38)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.18)}.mat-dialog-container,.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(0,0,0,.04)}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-indicator:after,.mat-expansion-panel-header-description{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.38)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.mat-form-field-label,.mat-hint{color:rgba(0,0,0,.54)}.mat-focused .mat-form-field-label{color:#9e9e9e}.mat-focused .mat-form-field-label.mat-accent{color:#ffab40}.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ffab40}.mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 1px;background-repeat:repeat-x}.mat-form-field-ripple{background-color:#9e9e9e}.mat-form-field-ripple.mat-accent{background-color:#ffab40}.mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-invalid .mat-form-field-label,.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field-invalid .mat-form-field-ripple{background-color:#f44336}.mat-error{color:#f44336}.mat-icon.mat-primary{color:#9e9e9e}.mat-icon.mat-accent{color:#ffab40}.mat-icon.mat-warn{color:#f44336}.mat-input-element:disabled{color:rgba(0,0,0,.38)}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-list .mat-list-item,.mat-list .mat-list-option,.mat-nav-list .mat-list-item,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-item,.mat-selection-list .mat-list-option{color:rgba(0,0,0,.87)}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-nav-list .mat-list-item{outline:none}.mat-nav-list .mat-list-item.mat-list-item-focus,.mat-nav-list .mat-list-item:hover{background:rgba(0,0,0,.04)}.mat-list-option{outline:none}.mat-list-option.mat-list-item-focus,.mat-list-option:hover{background:rgba(0,0,0,.04)}.mat-menu-panel{background:#fff}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled]{color:rgba(0,0,0,.38)}.mat-menu-item-submenu-trigger:after,.mat-menu-item .mat-icon:not([color]){color:rgba(0,0,0,.54)}.mat-menu-item-highlighted:not([disabled]),.mat-menu-item:focus:not([disabled]),.mat-menu-item:hover:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment{border-color:rgba(0,0,0,.38)}.mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27whitesmoke%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar-buffer{background-color:#f5f5f5}.mat-progress-bar-fill:after{background-color:#9e9e9e}.mat-progress-bar.mat-accent .mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27%23ffd180%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#ffd180}.mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#ffab40}.mat-progress-bar.mat-warn .mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27%23ffcdd2%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#9e9e9e}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ffab40}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-disabled .mat-radio-inner-circle,.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(0,0,0,.38)}.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#9e9e9e}.mat-radio-button.mat-primary .mat-radio-inner-circle{background-color:#9e9e9e}.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element{background-color:hsla(0,0%,62%,.26)}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ffab40}.mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#ffab40}.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element{background-color:rgba(255,171,64,.26)}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle{background-color:#f44336}.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}.mat-select-content,.mat-select-panel-done-animating{background:#fff}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#9e9e9e}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ffab40}.mat-form-field.mat-focused.mat-warn .mat-select-arrow,.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{color:rgba(0,0,0,.87)}.mat-drawer,.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#ff9800}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(255,152,0,.5)}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle .mat-ripple-element{background-color:rgba(255,152,0,.12)}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#9e9e9e}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:hsla(0,0%,62%,.5)}.mat-slide-toggle.mat-primary:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.12)}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(244,67,54,.5)}.mat-slide-toggle.mat-warn:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.12)}.mat-disabled .mat-slide-toggle-thumb{background-color:#bdbdbd}.mat-disabled .mat-slide-toggle-bar{background-color:rgba(0,0,0,.1)}.mat-slide-toggle-thumb{background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label,.mat-primary .mat-slider-track-fill{background-color:#9e9e9e}.mat-primary .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label,.mat-accent .mat-slider-track-fill{background-color:#ffab40}.mat-accent .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label,.mat-warn .mat-slider-track-fill{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-slider-focus-ring{background-color:rgba(255,171,64,.2)}.cdk-focused .mat-slider-track-background,.mat-slider:hover .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper:after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(90deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(180deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,.04)}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.38)}.mat-step-header .mat-step-icon{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-step-header .mat-step-icon-not-touched{background-color:rgba(0,0,0,.38);color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line:before{border-left-color:rgba(0,0,0,.12)}.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-tab-header,.mat-tab-nav-bar{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-header,.mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-] .mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label:focus,.mat-tab-group.mat-primary .mat-tab-link:focus,.mat-tab-nav-bar.mat-primary .mat-tab-label:focus,.mat-tab-nav-bar.mat-primary .mat-tab-link:focus{background-color:hsla(0,0%,96%,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#9e9e9e}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-accent .mat-tab-label:focus,.mat-tab-group.mat-accent .mat-tab-link:focus,.mat-tab-nav-bar.mat-accent .mat-tab-label:focus,.mat-tab-nav-bar.mat-accent .mat-tab-link:focus{background-color:rgba(255,209,128,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ffab40}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-warn .mat-tab-label:focus,.mat-tab-group.mat-warn .mat-tab-link:focus,.mat-tab-nav-bar.mat-warn .mat-tab-label:focus,.mat-tab-nav-bar.mat-warn .mat-tab-link:focus{background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label:focus,.mat-tab-group.mat-background-primary .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-link:focus{background-color:hsla(0,0%,96%,.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links{background-color:#9e9e9e}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-accent .mat-tab-label:focus,.mat-tab-group.mat-background-accent .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-link:focus{background-color:rgba(255,209,128,.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links{background-color:#ffab40}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-warn .mat-tab-label:focus,.mat-tab-group.mat-background-warn .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-link:focus{background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links{background-color:#f44336}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#9e9e9e;color:rgba(0,0,0,.87)}.mat-toolbar.mat-accent{background:#ffab40;color:rgba(0,0,0,.87)}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-snack-bar-container{background:#323232;color:#fff}.mat-simple-snackbar-action{color:#ffab40}*{font-family:Roboto,Helvetica Neue,sans-serif}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}@charset "UTF-8";.ui-widget,.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Roboto,Trebuchet MS,Arial,Helvetica,sans-serif;font-size:1em}.ui-widget :active{outline:none}.ui-widget-content{border:1px solid #d5d5d5;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #d9d9d9;background:#f6f7f9;color:#1b1d1f;font-weight:400}.ui-widget-header a{color:#1b1d1f}.ui-widget-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50)}.ui-state-default{border:1px solid #d6d6d6;background:#fff;color:#555}.ui-state-default a{color:#555}.ui-state-active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-state-active a{color:#212121}.ui-state-highlight{border-color:#156090;background:#186ba0;color:#fff}.ui-state-highlight a{color:#fff}.ui-state-focus{border-color:silver;background:#eee;color:#212121}.ui-state-focus a{color:#212121}.ui-state-error{border-color:#f44336;background:#f5554a;color:#cd0a0a}.ui-state-error a{color:#cd0a0a}.ui-state-disabled,.ui-widget:disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;cursor:default!important}.ui-state-disabled *,.ui-widget:disabled *{cursor:default!important}.ui-inputtext:enabled:hover{border-color:silver}.ui-inputtext.ui-state-focus,.ui-inputtext:focus{outline:0 none;border-color:silver;box-shadow:0 0 5px silver}.ui-inputgroup .ui-inputgroup-addon{border-color:#d6d6d6;background-color:#f0f0f0;color:#222}.ui-inputgroup .ui-inputgroup-addon:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-inputgroup .ui-inputgroup-addon:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-inputgroup .ui-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-inputgroup .ui-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-float-label input.ng-dirty.ng-invalid~label{color:#cd0a0a}.ui-autocomplete .ui-autocomplete-multiple-container:not(.ui-state-disabled).ui-state-focus,.ui-autocomplete .ui-autocomplete-multiple-container:not(.ui-state-disabled):hover,.ui-chips>ul:not(.ui-state-disabled).ui-state-focus,.ui-chips>ul:not(.ui-state-disabled):hover{border-color:silver}.ui-button:enabled:hover,.ui-button:focus,.ui-fileupload-choose:not(.ui-state-disabled):hover{outline:0 none;border-color:silver;background:#eee;color:#212121}.ui-button:enabled:hover a,.ui-button:focus a,.ui-fileupload-choose:not(.ui-state-disabled):hover a{color:#212121}.ui-button:enabled:active,.ui-fileupload-choose:not(.ui-state-disabled):active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-chkbox-box:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-chkbox-box:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-radiobutton-box:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-radiobutton-box:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-dropdown:not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-dropdown:not(.ui-state-disabled):hover a{color:#212121}.ui-dropdown-panel .ui-dropdown-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-dropdown-panel .ui-dropdown-item:not(.ui-state-highlight):hover a{color:#212121}.ui-listbox .ui-listbox-header .ui-listbox-filter-container .fa{color:#222}.ui-listbox:not(.ui-state-disabled) .ui-listbox-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-listbox:not(.ui-state-disabled) .ui-listbox-item:not(.ui-state-highlight):hover a{color:#212121}.ui-listbox.ui-state-disabled .ui-chkbox-box:not(.ui-state-active):hover{border-color:#d6d6d6;background:#fff;color:#555}.ui-multiselect:not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-multiselect:not(.ui-state-disabled):hover a{color:#212121}.ui-multiselect-panel .ui-multiselect-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-multiselect-panel .ui-multiselect-item:not(.ui-state-highlight):hover a{color:#212121}.ui-multiselect-panel .ui-multiselect-close{color:#1b1d1f}.ui-multiselect-panel .ui-multiselect-filter-container .fa{color:#222}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover{border-color:silver;background:#eee;color:#212121}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover a{color:#212121}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-selectbutton .ui-button:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-selectbutton .ui-button:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-togglebutton:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-togglebutton:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-paginator a:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-paginator a:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-paginator a{color:#555}.ui-datatable .ui-rowgroup-header a{color:#1b1d1f}.ui-datatable .ui-sortable-column:not(.ui-state-active):hover{background:#eee;color:#212121}.ui-datatable .ui-row-toggler{color:#222}.ui-datatable tbody.ui-datatable-hoverable-rows>tr.ui-widget-content:not(.ui-state-highlight):hover{cursor:pointer;background:#eee;color:#212121}.ui-orderlist .ui-orderlist-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-orderlist .ui-orderlist-item:not(.ui-state-highlight):hover a{color:#212121}.ui-picklist .ui-picklist-item:not(.ui-state-disabled):not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-picklist .ui-picklist-item:not(.ui-state-disabled):not(.ui-state-highlight):hover a{color:#212121}.ui-picklist .ui-picklist-droppoint-highlight{border-color:#156090;background:#186ba0;color:#1f1f1f}.ui-picklist .ui-picklist-droppoint-highlight a{color:#1f1f1f}.ui-picklist .ui-picklist-highlight{border-color:#156090;color:#1f1f1f}.ui-picklist .ui-picklist-highlight a{color:#1f1f1f}.ui-tree.ui-treenode-dragover{border-color:#156090}.ui-tree .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-tree .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover a{color:#212121}.ui-tree .ui-treenode-content.ui-treenode-dragover{background:#d6d6d6;color:#212121}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover{background-color:inherit;color:inherit}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable:not(.ui-state-highlight):hover a{color:#212121}.ui-treetable .ui-treetable-row.ui-treetable-row-selectable:not(.ui-state-highlight):hover{background:#eee;color:#212121}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node:not(.ui-state-highlight):hover a{color:#212121}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover a{color:#212121}.ui-fieldset.ui-fieldset-toggleable .ui-fieldset-legend:hover{border-color:silver;background:#eee;color:#212121}.ui-fieldset.ui-fieldset-toggleable .ui-fieldset-legend:hover a{color:#212121}.ui-panel .ui-panel-titlebar .ui-panel-titlebar-icon:hover{border-color:silver;background:#eee;color:#212121}.ui-panel .ui-panel-titlebar .ui-panel-titlebar-icon:hover a{color:#212121}.ui-tabview .ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-tabview .ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover a{color:#212121}.ui-dialog .ui-dialog-titlebar-icon{color:#1b1d1f}.ui-dialog .ui-dialog-titlebar-icon:hover{border-color:silver;background:#eee;color:#212121}.ui-dialog .ui-dialog-titlebar-icon:hover a{color:#212121}.ui-sidebar .ui-sidebar-close{color:#1b1d1f}.ui-sidebar .ui-sidebar-close:hover{border-color:silver;background:#eee;color:#212121}.ui-sidebar .ui-sidebar-close:hover a{color:#212121}.ui-overlaypanel .ui-overlaypanel-close:hover{border-color:silver;background:#eee;color:#212121}.ui-overlaypanel .ui-overlaypanel-close:hover a{color:#212121}.ui-inplace .ui-inplace-display:hover{border-color:silver;background:#eee;color:#212121}.ui-inplace .ui-inplace-display:hover a{color:#212121}.ui-breadcrumb a{color:#1b1d1f}.ui-menu .ui-menuitem .ui-menuitem-link{color:#222}.ui-menu .ui-menuitem .ui-menuitem-link:hover{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-menu .ui-menuitem .ui-menuitem-link:hover a{color:#212121}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link a{color:#212121}.ui-tabmenu .ui-tabmenu-nav li:not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-tabmenu .ui-tabmenu-nav li:not(.ui-state-active):hover a{color:#212121}.ui-steps .ui-steps-item:not(.ui-state-highlight):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-steps .ui-steps-item:not(.ui-state-highlight):not(.ui-state-disabled):hover a{color:#212121}.ui-panelmenu .ui-panelmenu-header:not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121;border-color:#d6d6d6}.ui-panelmenu .ui-panelmenu-header.ui-state-active a,.ui-panelmenu .ui-panelmenu-header:not(.ui-state-active):hover a{color:#212121}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link{color:#222}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link:hover{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link:hover a{color:#212121}.ui-datepicker .ui-datepicker-header a{color:#1b1d1f}.ui-datepicker .ui-datepicker-header a:hover{border-color:silver;background:#eee;color:#212121}.ui-datepicker .ui-datepicker-header a:hover a{color:#212121}.ui-datepicker .ui-datepicker-calendar td:not(.ui-state-disabled) a:hover{border-color:silver;background:#eee;color:#212121}.ui-datepicker .ui-datepicker-calendar td:not(.ui-state-disabled) a:hover a{color:#212121}.fc .fc-toolbar .fc-prev-button .ui-icon-circle-triangle-w{margin-top:.3em;background:none!important;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-indent:0!important;text-align:center}.fc .fc-toolbar .fc-prev-button .ui-icon-circle-triangle-w:before{content:"\F053"}.fc .fc-toolbar .fc-next-button .ui-icon-circle-triangle-e{margin-top:.3em;background:none!important;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-indent:0!important;text-align:center}.fc .fc-toolbar .fc-next-button .ui-icon-circle-triangle-e:before{content:"\F054"}.ui-rating a{color:#222}.ui-organizationchart .ui-organizationchart-line-down{background-color:#bcbcbc}.ui-organizationchart .ui-organizationchart-line-left{border-right:1px solid #bcbcbc}.ui-organizationchart .ui-organizationchart-line-top{border-top:1px solid #bcbcbc}.ui-organizationchart .ui-organizationchart-node-content{border-color:#bcbcbc}.ui-organizationchart .ui-organizationchart-node-content .ui-node-toggler{color:#bcbcbc}.ui-inputtext.ng-dirty.ng-invalid,p-autocomplete.ng-dirty.ng-invalid>.ui-autocomplete>.ui-inputtext,p-calendar.ng-dirty.ng-invalid>.ui-calendar>.ui-inputtext,p-checkbox.ng-dirty.ng-invalid .ui-chkbox-box,p-chips.ng-dirty.ng-invalid>.ui-inputtext,p-dropdown.ng-dirty.ng-invalid>.ui-dropdown,p-inputmask.ng-dirty.ng-invalid>.ui-inputtext,p-inputswitch.ng-dirty.ng-invalid .ui-inputswitch,p-listbox.ng-dirty.ng-invalid .ui-inputtext,p-multiselect.ng-dirty.ng-invalid>.ui-multiselect,p-radiobutton.ng-dirty.ng-invalid .ui-radiobutton-box,p-selectbutton.ng-dirty.ng-invalid .ui-button,p-spinner.ng-dirty.ng-invalid>.ui-inputtext,p-togglebutton.ng-dirty.ng-invalid .ui-button{border-bottom-color:#f44336}.ui-corner-tl{border-top-left-radius:3px}.ui-corner-tr{border-top-right-radius:3px}.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-br{border-bottom-right-radius:3px}.ui-corner-top{border-top-left-radius:3px;border-top-right-radius:3px}.ui-corner-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ui-corner-right{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-corner-left{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-corner-all{border-radius:3px}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot);src:local("Roboto"),local("Roboto-Regular"),url(roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot?#iefix) format("embedded-opentype"),url(roboto-v15-latin-regular.7e367be02cd17a96d513.woff2) format("woff2"),url(roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff) format("woff"),url(roboto-v15-latin-regular.38861cba61c66739c145.ttf) format("truetype"),url(roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg#Roboto) format("svg")}.ui-widget-header{background:#f6f7f9 0 0 repeat-x;background:linear-gradient(180deg,#f6f7f9 0,#ebedf0)}.ui-accordion .ui-accordion-header{background:#f6f7f9;border-top:1px solid #d9d9d9}.ui-accordion .ui-accordion-header a{color:#1b1d1f}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-accordion .ui-accordion-header.ui-state-active{background:#fff;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-radius:0}.ui-accordion .ui-accordion-content,.ui-tabview.ui-widget-content{border:0 none}.ui-tabview .ui-tabview-nav{background:transparent}.ui-tabview .ui-tabview-nav>li.ui-state-default{background:#f6f7f9}.ui-tabview .ui-tabview-nav>li.ui-state-active{background:#fff;font-weight:400;color:#555}.ui-tabview .ui-tabview-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-slider{position:relative;text-align:left;background:#838688;border:none;box-shadow:inset 0 1px 3px rgba(0,0,0,.6)}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:17px!important;height:21px!important;cursor:default;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAVCAYAAAAjODzXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZBQjgwQThDRjQ4ODExRTBBMzgxQjZGRjMwN0M4RjFGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZBQjgwQThERjQ4ODExRTBBMzgxQjZGRjMwN0M4RjFGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkFCODBBOEFGNDg4MTFFMEEzODFCNkZGMzA3QzhGMUYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkFCODBBOEJGNDg4MTFFMEEzODFCNkZGMzA3QzhGMUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5U68QXAAAED0lEQVR42qyWzU9jVRjGz+29pdBSKJWAksmMGheTyAwLKCRE/gAXAq5MEHZujCtCov8CS5dOMgkLozALo0ZCYgTdkgyTAhqR8GUDmGKhQin97q3Pc3zP5FpnGJ16k6f33N7z/u77dc69lvrn4RwcHLxXq9XeKhaLt6vV6i3XdRO4/qVUKn0Ti8XuY05FXX/8Z4blHa+srLw2NDT0WVNTUyyTyaiTkxN1dnamQqGQCgaD+gzgw/X19XfHx8d3YVOrc+C5GT4B+AB4Y3h4+BEmxxzHUX6//7Es6y9/ASAoNjIy8mhhYaHXY98wQ//09/dHent7P8ekcLlc1gYtLS1ahCA61dzcrAKBgAb6fL7w4ODgp5xmvGiUQUf8s7OzH6J+N7LZrEJNVaVS0cZMIwEGaCCcA2jf8vLyR+yH/4NBSDgajb59eXmpbNvWqQNQTw6HwxrG2hKCplP5fF6LUbe3t78D+48ZUaMMOhKBZ7fYWPScN40ikYiGtLa2qkKhoPigXC6nx4wYdjdpT0caZdCREOoVMDcoAugxwWw6dr75H8vv8RjwJtrrGjfIoCMODIpIZYAp1ZsADNva2lRHR4dKJpOqu7tbR0SwiYg1xsGutLlsG2XQkcrp6Wm6q6vrJRqzuVhXnk2EjEaWncI8HQkh+/v7Z7CvktYog6vmanNzM07P0Tg6CjaVSa05p9NpHQnTyoZkdKurqw9pT21sbKw3wuAuE4WXb66trd3r6ekJcQI7npFwKRpDNiGjpLgCdnZ2Un19fe/D/geWRhifPAfjA9h/z/pW6TFS1DI6OnoHk22mjGIUhBHCZQc2YH7eK09NTd07Ojpahv1vrDMZe3t7rWNjY3fB8P0bxuTk5P3j4+PvyKAj7K7i7u7u1dLSkosd8tXOzs6AgfDM2mJV6J1xe3s7A8BCPB7/EnZbUF4YJTDyi4uLamBg4OXrGFtbW5cTExNfoJxfwe5nMmzZodlw2VQqdTE3N5fiNo0NKoRa20i5D5FUDw8Pc/Pz89vT09MPMO9bzN+ALsQJS96meTRtDowLZCiMngkKw0LDuolEIg/G3szMzNd4EZIRh/7g883bl03L9dwF3YZeh16BXuD2LUvsFPoV+kkykWIWPG9gMoLQDeiuMLhZdXgYfGgC+hHahI6hAoOxPJ8DtryAotCLUKeAHYn2Sh6ehNIG4HHEkge2if1NCSwkbDKy0O/iTFKu+X/NEUjN1BnKyPhcwJZcl8WZrIzduu+RmpQ4J44qKV1AsuVKP53L/bzM1wy7DlTzOOXKRDpXNPuFjCtP+CjycipiWxGnCxLAuShbV9a/faGZa0vK4Zjt2wM3D3Cv+Uw0ZXYkG/VZLT0po9Y1MKvuvjdjzzq89t6vOPdpnD8FGACiWVtxaofC7AAAAABJRU5ErkJggg==) 0 0 no-repeat;outline:none;border-radius:0;border:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background:#14a4ff;box-shadow:inset 0 1px 3px rgba(0,0,0,.6);border-radius:3px}.ui-slider .ui-slider-handle.ui-state-active{background-position:-17px 0}.ui-slider-horizontal{height:6px}.ui-slider-horizontal .ui-slider-handle{top:-2px!important;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.1em!important;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-progressbar.ui-progressbar-determinate .ui-progressbar-value{border:0 none;background:#8ec5fc}.ui-progressbar.ui-progressbar-determinate .ui-progressbar .ui-progressbar-label{color:#222}.ui-progressbar.ui-progressbar-indeterminate{background:#8ec5fc}.ui-progressbar.ui-progressbar-indeterminate .ui-progressbar-value{border:0 none;background-color:#186ba0}.ui-button,.ui-widget-content .ui-button,.ui-widget-header .ui-button,.ui-widget.ui-button{border:1px solid #2399e5;color:#fff;background:#2399e5;transition:background-color .2s}.ui-button:enabled:hover,.ui-button:focus,.ui-widget-content .ui-button:enabled:hover,.ui-widget-content .ui-button:focus,.ui-widget-header .ui-button:enabled:hover,.ui-widget-header .ui-button:focus,.ui-widget.ui-button:enabled:hover,.ui-widget.ui-button:focus{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-button:enabled:active,.ui-widget-content .ui-button:enabled:active,.ui-widget-header .ui-button:enabled:active,.ui-widget.ui-button:enabled:active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-fileupload-choose.ui-state-focus,.ui-fileupload-choose:not(.ui-state-disabled):hover{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-chkbox-box.ui-state-active,.ui-fileupload-choose:not(.ui-state-disabled):active,.ui-radiobutton-box.ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-chkbox-box.ui-state-focus,.ui-radiobutton-box.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-chkbox-box.ui-state-focus.ui-state-active{background:#186ba0}.ui-inputtext{background:#fff;color:#222;transition:.2s}.ui-inputtext.ui-state-focus,.ui-inputtext:focus{box-shadow:0 0 5px #1f89ce}.ui-inputswitch-on{background:#186ba0!important;color:#fff!important}.ui-paginator .ui-paginator-page.ui-state-active{background:#186ba0;color:#fff;border-color:#156090}.ui-datatable th.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-datatable th.ui-sortable-column:not(.ui-state-active):hover{background:#d3d5d8;border-color:#d9d9d9}.ui-datatable th.ui-state-active{background:#186ba0;color:#fff}.ui-datatable tbody>tr.ui-widget-content{border-color:#d9d9d9}.ui-datatable tbody>tr.ui-widget-content.ui-datatable-odd{background-color:#fafafb}.ui-datatable tbody>tr.ui-widget-content.ui-state-highlight{background-color:#186ba0;color:#fff}.ui-datatable tfoot td.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-panel.ui-widget{padding:0}.ui-panel.ui-widget .ui-panel-titlebar.ui-corner-all{-moz-border-radius-bottom-left:0;border-bottom-left-radius:0;-moz-border-radius-bottom-right:0;border-bottom-right-radius:0}.ui-panel.ui-widget .ui-panel-titlebar{border-width:0 0 1px 0}.ui-panel.ui-widget .ui-panel-titlebar-icon span{position:relative;top:1px}.ui-treetable th.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-selectbutton .ui-button.ui-state-default,.ui-togglebutton.ui-button.ui-state-default{border:1px solid #d6d6d6;background:#fff;font-weight:400;color:#555}.ui-selectbutton .ui-button.ui-state-focus,.ui-selectbutton .ui-button.ui-state-hover,.ui-togglebutton.ui-button.ui-state-focus,.ui-togglebutton.ui-button.ui-state-hover{border:1px solid silver;background:#eee;font-weight:400;color:#212121}.ui-selectbutton .ui-button.ui-state-focus.ui-state-active,.ui-togglebutton.ui-button.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-selectbutton .ui-button.ui-state-active,.ui-togglebutton.ui-button.ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-multiselect .ui-multiselect-label{background-color:#fff}.ui-dropdown.ui-state-focus,.ui-multiselect.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-growl-item-container.ui-state-highlight.ui-growl-message-info{background-color:#2196f3;border-color:#2196f3}.ui-growl-item-container.ui-state-highlight.ui-growl-message-error{background-color:#f44336;border-color:#f44336}.ui-growl-item-container.ui-state-highlight.ui-growl-message-warn{background-color:#ffb300;border-color:#ffb300}.ui-growl-item-container.ui-state-highlight.ui-growl-message-success{background-color:#4caf50;border-color:#4caf50}.ui-tabmenu{border:0 none}.ui-tabmenu .ui-tabmenu-nav{background:none}.ui-tabmenu .ui-tabmenu-nav>li.ui-state-default{background:#f6f7f9}.ui-tabmenu .ui-tabmenu-nav>li.ui-state-active{background:#fff;font-weight:400;color:#555}.ui-tabmenu .ui-tabmenu-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-menu,.ui-menu .ui-menu-child{border:1px solid #d9d9d9;color:#1b1d1f;background:#f6f7f9 0 0 repeat-x;background:linear-gradient(180deg,#f6f7f9 0,#ebedf0)}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link,.ui-menu .ui-menuitem .ui-menuitem-link:hover{background-color:#a6a6a6;color:#fff}.ui-panelmenu .ui-panelmenu-header.ui-state-active,.ui-panelmenu .ui-panelmenu-header.ui-state-active a{border-color:#156090;background:#186ba0;color:#fff}.ui-datepicker.ui-widget{padding:0}.ui-datepicker.ui-widget .ui-datepicker-header{border-radius:0;border-top:0 none;border-left:0 none;border-right:0 none}.ui-datepicker.ui-widget .ui-datepicker-header a:hover{border-width:1px}.ui-datepicker.ui-widget .ui-datepicker-calendar{margin:0}.ui-datepicker.ui-widget .ui-datepicker-calendar thead th{background-color:#f6f8fa;padding:8px}.ui-datepicker.ui-widget .ui-datepicker-calendar td{border-bottom:1px solid hsla(0,0%,84%,.5);padding:0}.ui-datepicker.ui-widget .ui-datepicker-calendar td a{border:0 none;text-align:center;padding:8px}.ui-datepicker.ui-widget .ui-datepicker-calendar td a.ui-state-highlight{background-color:#d6d6d6;color:#212121}.ui-datepicker.ui-widget .ui-datepicker-calendar td a.ui-state-active{background-color:#186ba0;color:#fff}.ui-datepicker.ui-widget .ui-datepicker-calendar tr:last-child td{border-bottom:0 none}.ui-datepicker.ui-widget .ui-timepicker{border-bottom:0 none;border-left:0 none;border-right:0 none;border-radius:0}.ui-datepicker.ui-widget.ui-datepicker-timeonly .ui-timepicker{border-top:0 none}.ui-steps .ui-steps-item.ui-state-highlight .ui-menuitem-link{color:#fff}.ui-dialog.ui-widget .ui-dialog-titlebar{padding:1em 1.5em}.ui-dialog.ui-widget .ui-dialog-titlebar .ui-dialog-title{font-size:1.25em}.ui-dialog.ui-widget .ui-dialog-content{padding:1em 1.5em}.fc .fc-button-group .ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-widget,.ui-widget *{box-sizing:border-box}.ui-helper-hidden{display:none!important}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-hidden-accessible input,.ui-helper-hidden-accessible select{-webkit-transform:scale(0);transform:scale(0)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled,.ui-state-disabled a{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.3)}.ui-unselectable-text{-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.ui-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.ui-overflow-hidden{overflow:hidden}::-webkit-input-placeholder{color:#898989}:-moz-placeholder,::-moz-placeholder{color:#898989;opacity:1}:-ms-input-placeholder,::-ms-input-placeholder{color:#898989}.ui-placeholder{color:#898989}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-header a{display:block;padding:.5em .5em .5em 2em}.ui-accordion .ui-accordion-header>.fa{position:absolute;left:.5em;top:50%;margin-top:-.5em}.ui-accordion .ui-accordion-content{padding:1em;border-top:0;overflow:visible;zoom:1}.ui-accordion .ui-accordion-header.ui-state-disabled,.ui-accordion .ui-accordion-header.ui-state-disabled a{cursor:default}.ui-accordion-content-wrapper-overflown{overflow:hidden}.ui-rtl .ui-accordion .ui-accordion-header a{padding:.5em 2em .5em .5em}.ui-rtl .ui-accordion .ui-accordion-header>.fa{left:auto;right:.5em}.ui-rtl .ui-accordion .ui-accordion-header>.fa-caret-right:before{content:"\F0D9"}.ui-autocomplete{width:auto;zoom:1;cursor:pointer;box-shadow:none;position:relative;display:inline-block}.ui-autocomplete .ui-autocomplete-dropdown{height:100%;width:2em;margin-right:0;vertical-align:top}.ui-autocomplete .ui-autocomplete-input{padding-right:1.5em}.ui-autocomplete-loader{position:absolute;right:.25em;top:50%;margin-top:-.5em}.ui-autocomplete-query{font-weight:700}.ui-autocomplete-panel{position:absolute;overflow:auto}.ui-autocomplete-panel .ui-autocomplete-list{padding:.4em;border:0 none}.ui-autocomplete-panel .ui-autocomplete-list-item{border:0 none;cursor:pointer;font-weight:400;margin:1px 0;padding:.186em .313em;text-align:left}.ui-autocomplete .ui-button-icon-only,.ui-autocomplete .ui-button-icon-only:enabled:active,.ui-autocomplete .ui-button-icon-only:enabled:focus,.ui-autocomplete .ui-button-icon-only:enabled:hover{border-left:0 none}.ui-autocomplete-multiple-container{display:inline-block;vertical-align:middle}.ui-autocomplete-multiple-container.ui-inputtext{clear:left;cursor:text;list-style-type:none;margin:0;overflow:hidden;padding:0 1.5em 0 .25em}.ui-autocomplete-token{cursor:default;display:inline-block;vertical-align:middle;overflow:hidden;padding:.125em .5em;white-space:nowrap;position:relative;margin-right:.125em;border:0 none;font-size:.9em}.ui-autocomplete-token-label{display:block;margin-right:2em}.ui-autocomplete-token-icon{margin-top:-.5em;position:absolute;right:.2em;top:50%;cursor:pointer}.ui-autocomplete-input-token{display:inline-block;vertical-align:middle;list-style-type:none;margin:0 0 0 .125em;padding:.25em .25em .25em 0}.ui-autocomplete-input-token input{border:0 none;width:10em;outline:medium none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0}.ui-autocomplete-dd .ui-autocomplete-loader{right:2.25em}.ui-autocomplete-dd .ui-autocomplete-multiple-container.ui-corner-all,.ui-autocomplete-dd input.ui-corner-all{border-top-right-radius:0;border-bottom-right-radius:0}.ui-autocomplete-dd .ui-autocomplete-dropdown.ui-corner-all{border-top-left-radius:0;border-bottom-left-radius:0}.ui-fluid .ui-autocomplete,.ui-fluid .ui-autocomplete-input,.ui-fluid p-autocomplete{width:100%}.ui-fluid .ui-autocomplete.ui-autocomplete-dd .ui-autocomplete-input,.ui-fluid .ui-autocomplete.ui-autocomplete-dd .ui-autocomplete-multiple-container{width:calc(100% - 2em)}.ui-fluid .ui-autocomplete .ui-autocomplete-dropdown.ui-button{width:2em}.ui-blockui{position:absolute;top:0;left:0;width:100%;height:100%}.ui-blockui-document{position:fixed}.ui-breadcrumb{margin:0;padding:0;padding:.3em}.ui-breadcrumb ul{margin:0;padding:0}.ui-breadcrumb ul li{display:inline-block;vertical-align:middle}.ui-breadcrumb ul li .ui-menuitem-link{text-decoration:none}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.25em 1em}.ui-button-icon-only .ui-button-text{padding:.25em;text-indent:-9999999px}.ui-button-text-icon-left .ui-button-text{padding:.25em 1em .25em 2.1em}.ui-button-text-icon-right .ui-button-text{padding:.25em 2.1em .25em 1em}.ui-button-icon-only .fa,.ui-button-text-icon-left .fa,.ui-button-text-icon-right .fa{position:absolute;top:50%;margin-top:-.5em}.ui-button-icon-only .fa{top:50%;left:50%;margin-top:-.5em;margin-left:-.6em}.ui-button-icon-left{left:.5em}.ui-button-icon-right{right:.5em}.ui-buttonset .ui-button{margin-left:0;margin-right:0}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-fluid .ui-button{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-fluid .ui-button-text-icon-left .ui-button-text,.ui-fluid .ui-button-text-icon-right .ui-button-text{padding-left:1em;padding-right:1em}.ui-fluid .ui-buttonset,.ui-fluid .ui-buttonset.ui-buttonset-1 .ui-button{width:100%}.ui-fluid .ui-buttonset.ui-buttonset-2 .ui-button{width:50%}.ui-fluid .ui-buttonset.ui-buttonset-3 .ui-button{width:33.3%}.ui-fluid .ui-buttonset.ui-buttonset-4 .ui-button{width:25%}.ui-fluid .ui-buttonset.ui-buttonset-5 .ui-button{width:20%}.ui-fluid .ui-buttonset.ui-buttonset-6 .ui-button{width:16.6%}@media(max-width:640px){.ui-fluid .ui-buttonset.ui-buttonset-1 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-2 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-3 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-4 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-5 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-6 .ui-button{width:100%}}.ui-button.ui-button-secondary.ui-state-default,.ui-splitbutton.ui-button-secondary .ui-button.ui-state-default{background-color:#fff;border-color:#ccc;color:#373a3c}.ui-button.ui-button-secondary:enabled:hover,.ui-button.ui-button-secondary:focus,.ui-splitbutton.ui-button-secondary .ui-button:enabled:hover,.ui-splitbutton.ui-button-secondary .ui-button:focus{background-color:#f2f2f2;border-color:#ccc;color:#373a3c}.ui-button.ui-button-secondary:enabled:active,.ui-splitbutton.ui-button-secondary .ui-button:enabled:active{background-color:#e6e6e6;border-color:#ccc;color:#373a3c}.ui-button.ui-button-success.ui-state-default,.ui-splitbutton.ui-button-success .ui-button.ui-state-default{background-color:#5cb85c;border-color:#5cb85c;color:#fff}.ui-button.ui-button-success:enabled:hover,.ui-button.ui-button-success:focus,.ui-splitbutton.ui-button-success .ui-button:enabled:hover,.ui-splitbutton.ui-button-success .ui-button:focus{background-color:#4cae4c;border-color:#5cb85c}.ui-button.ui-button-success:enabled:active,.ui-splitbutton.ui-button-success .ui-button:enabled:active{background-color:#449d44;border-color:#5cb85c}.ui-button.ui-button-info.ui-state-default,.ui-splitbutton.ui-button-info .ui-button.ui-state-default{background-color:#5bc0de;border-color:#5bc0de;color:#fff}.ui-button.ui-button-info:enabled:hover,.ui-button.ui-button-info:focus,.ui-splitbutton.ui-button-info .ui-button:enabled:hover,.ui-splitbutton.ui-button-info .ui-button:focus{background-color:#46b8da;border-color:#5bc0de}.ui-button.ui-button-info:enabled:active,.ui-splitbutton.ui-button-info .ui-button:enabled:active{background-color:#31b0d5;border-color:#5bc0de}.ui-button.ui-button-warning.ui-state-default,.ui-splitbutton.ui-button-warning .ui-button.ui-state-default{background-color:#f0ad4e;border-color:#f0ad4e;color:#fff}.ui-button.ui-button-warning:enabled:hover,.ui-button.ui-button-warning:focus,.ui-splitbutton.ui-button-warning .ui-button:enabled:hover,.ui-splitbutton.ui-button-warning .ui-button:focus{background-color:#eea236;border-color:#f0ad4e}.ui-button.ui-button-warning:enabled:active,.ui-splitbutton.ui-button-warning .ui-button:enabled:active{background-color:#ec971f;border-color:#f0ad4e}.ui-button.ui-button-danger.ui-state-default,.ui-splitbutton.ui-button-danger .ui-button.ui-state-default{background-color:#d9534f;border-color:#d9534f;color:#fff}.ui-button.ui-button-danger:enabled:hover,.ui-button.ui-button-danger:focus,.ui-splitbutton.ui-button-danger .ui-button:enabled:hover,.ui-splitbutton.ui-button-danger .ui-button:focus{background-color:#d43f3a;border-color:#d9534f}.ui-button.ui-button-danger:enabled:active,.ui-splitbutton.ui-button-danger .ui-button:enabled:active{background-color:#c9302c;border-color:#d9534f}.ui-calendar{position:relative;display:inline-block}.ui-calendar .ui-calendar-button{position:absolute;height:100%;border-top-left-radius:0;border-bottom-left-radius:0;width:2em;border-left:0 none}.ui-calendar .ui-calendar-button:enabled:hover,.ui-calendar .ui-calendar-button:focus{border-left:0 none}.ui-fluid .ui-calendar{width:100%}.ui-fluid .ui-calendar-button{width:2em}.ui-fluid .ui-datepicker-buttonbar button{width:auto}.ui-fluid .ui-calendar.ui-calendar-w-btn .ui-inputtext{width:calc(100% - 2em)}.ui-datepicker{width:17em;padding:.2em;display:none;position:absolute}.ui-datepicker.ui-datepicker-inline{display:inline-block;position:static}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:.125em;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev{left:.125em}.ui-datepicker .ui-datepicker-next{right:.125em}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;top:50%;margin-top:-.5em}.ui-datepicker .ui-datepicker-prev span{margin-left:-.25em}.ui-datepicker .ui-datepicker-next span{margin-left:-.125em}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:.125em 0;vertical-align:middle}.ui-datepicker select.ui-datepicker-month{width:55%}.ui-datepicker select.ui-datepicker-year{width:35%}.ui-datepicker select.ui-datepicker-month{margin-right:.25em}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:.125em}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker .ui-datepicker-buttonbar{border-left:0 none;border-right:0 none;border-bottom:0 none;padding:.2em}.ui-datepicker .ui-datepicker-buttonbar>.ui-g>div:last-child{text-align:right}.ui-datepicker .ui-datepicker-buttonbar>.ui-g>div{padding:0}.ui-calendar.ui-calendar-w-btn input{border-top-right-radius:0;border-bottom-right-radius:0}.ui-timepicker{text-align:center;padding:.5em 0}.ui-timepicker>div{display:inline-block;margin-left:.5em;min-width:1.5em}.ui-timepicker>.ui-minute-picker,.ui-timepicker>.ui-second-picker{margin-left:0}.ui-timepicker>.ui-separator{margin-left:0;min-width:.75em}.ui-timepicker>.ui-separator a{visibility:hidden}.ui-timepicker>div a{display:block;opacity:.7;filter:Alpha(Opacity=70)}.ui-timepicker>div a:hover{display:block;opacity:1;filter:Alpha(Opacity=100)}.ui-carousel{position:relative;padding:.063em}.ui-carousel .ui-carousel-viewport .ui-carousel-items{list-style:none outside none;margin:0;padding:0;position:relative;width:32000px;left:0}.ui-carousel .ui-carousel-viewport .ui-carousel-items .ui-carousel-item{margin:1px;padding:0;float:left;box-sizing:border-box}.ui-carousel .ui-carousel-viewport{overflow:hidden;position:relative;border:0}.ui-carousel .ui-carousel-footer{margin:1px 1px 0 1px;padding:.5em;overflow:hidden}.ui-carousel .ui-carousel-header{margin:0 1px;overflow:hidden;padding:.625em}.ui-carousel .ui-carousel-header .ui-carousel-header-title{display:inline-block;overflow:hidden}.ui-carousel .ui-carousel-dropdown,.ui-carousel .ui-carousel-mobiledropdown{float:right;margin:0 .625em;background-image:none}.ui-carousel .ui-carousel-dropdown option,.ui-carousel .ui-carousel-mobiledropdown option{background-image:none;border:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.ui-carousel .ui-carousel-button{float:right;margin:.125em}.ui-carousel .ui-carousel-page-link{float:left;margin:0 .125em;text-decoration:none}.ui-carousel .ui-carousel-button,.ui-carousel .ui-carousel-page-link{cursor:pointer}.ui-carousel .ui-carousel-page-links{margin:0 .5em;margin-top:.125em;float:right}.ui-carousel .ui-carousel-mobiledropdown{display:none}.ui-chkbox{display:inline-block;cursor:pointer;vertical-align:middle;margin-right:.25em}.ui-chkbox .ui-chkbox-box{width:1.125em;height:1.125em;line-height:1.125em;border-radius:2px;text-align:center}.ui-chkbox .ui-chkbox-icon{display:block}.ui-chkbox-label{vertical-align:middle}.ui-chips>ul.ui-inputtext{clear:left;cursor:text;list-style-type:none;margin:0;overflow:hidden;padding:0 .25em}.ui-chips-token{cursor:default;display:inline-block;vertical-align:middle;overflow:hidden;padding:.125em .5em;white-space:nowrap;position:relative;margin-right:.125em;border:0 none;font-size:.9em}.ui-chips-token .ui-chips-token-label{display:block;margin-right:2em}.ui-chips>.ui-state-disabled .ui-chips-token-label{margin-right:0}.ui-chips-token .ui-chips-token-icon{margin-top:-.5em;position:absolute;right:.2em;top:50%;cursor:pointer}.ui-chips-input-token{display:inline-block;vertical-align:middle;list-style-type:none;margin:0 0 0 .125em;padding:.25em .25em .25em 0}.ui-chips-input-token input{border:0 none;width:10em;outline:medium none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0}.ui-colorpicker{display:inline-block}.ui-colorpicker-dragging{cursor:pointer}.ui-colorpicker-overlay{position:relative}.ui-colorpicker-panel{position:relative;width:193px;height:166px;background-color:#323232;border-color:#191919}.ui-colorpicker-overlay-panel{display:none;position:absolute}.ui-colorpicker-preview{width:2em;cursor:pointer}.ui-colorpicker-panel .ui-colorpicker-content{position:relative}.ui-colorpicker-panel .ui-colorpicker-color-selector{width:150px;height:150px;top:8px;left:8px;position:absolute}.ui-colorpicker-panel .ui-colorpicker-color{width:150px;height:150px;background:transparent url(color.c7a33805ffda0d32bd2a.png) no-repeat 0 0}.ui-colorpicker-panel .ui-colorpicker-color-handle{position:absolute;top:0;left:150px;border-radius:100%;width:10px;height:10px;border:1px solid #fff;margin:-5px 0 0 -5px;cursor:pointer}.ui-colorpicker-panel .ui-colorpicker-hue{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAACWCAIAAAC3uvTNAAAA7ElEQVRYw+2YUQqDQAxEh9GWuqV6Be9/JT88RN0VRUuv0ElBwhKY3yF5m90kLKd+mF/975r6geNyjm9Fy0kgqTJ6nqoIdGKczjmPJU5tZxA8wWPL7YOHKhZAlcmTAVVcxSCrMbfgqY/H6JEOoASPe56tgSrqLR7U2zWojwWjJ3jq47HEiZoGTwJxP1RRXw8y9RZfCMhbhTHOVTxXnUFtPJ5rGjzu35y2KfKGQxWT2K4TQL1d2zz6KAH1kRU8wfOXx+37qY3Hct+aDaqot2u7R/wMuDS3qnj0z0HqK4X/+kRNHdfUwFP2Nisqe/sFuUZiVjC9HCUAAAAASUVORK5CYII=) no-repeat 0 0;width:17px;height:150px;top:8px;left:167px;position:absolute;opacity:.85}.ui-colorpicker-panel .ui-colorpicker-hue-handle{position:absolute;top:150px;left:0;width:21px;margin-left:-2px;margin-top:-5px;height:10px;border:2px solid #fff;opacity:.85;cursor:pointer}.ui-colorpicker-panel.ui-state-disabled .ui-colorpicker-color-handle,.ui-colorpicker-panel.ui-state-disabled .ui-colorpicker-hue-handle{opacity:.5}.ui-datagrid .ui-paginator{text-align:center;border-top:0 none}.ui-datagrid-column{padding:.25em}.ui-datagrid-content-empty{padding:.25em .625em}.ui-datagrid .ui-datagrid-footer,.ui-datagrid .ui-datagrid-header{text-align:center;padding:.5em .75em}.ui-datagrid .ui-datagrid-header{border-bottom:0 none}.ui-datagrid .ui-datagrid-footer{border-top:0 none}.ui-datagrid .ui-paginator-top{border-bottom:0 none}.ui-datagrid .ui-paginator-bottom{border-top:0 none}.ui-datalist .ui-datalist-footer,.ui-datalist .ui-datalist-header{text-align:center;padding:.5em .75em}.ui-datalist .ui-datalist-header{border-bottom:0 none}.ui-datalist .ui-datalist-footer,.ui-datalist .ui-paginator{border-top:0 none}.ui-datalist .ui-datalist-data{margin:0;padding:0}.ui-datalist .ui-datalist-data>li{list-style-type:none}.ui-datalist .ui-datalist-emptymessage{padding:.5em .75em}.ui-datalist.ui-datalist-scrollable .ui-datalist-content{overflow:auto}.ui-datascroller .ui-datascroller-header{text-align:center;padding:.5em .75em;border-bottom:0 none}.ui-datascroller .ui-datascroller-footer{text-align:center;padding:.25em .625em;border-top:0 none}.ui-datascroller .ui-datascroller-content{padding:.25em .625em}.ui-datascroller-inline .ui-datascroller-content{overflow:auto}.ui-datascroller .ui-datascroller-list{list-style-type:none;margin:0;padding:0}.ui-datatable{position:relative}.ui-datatable table{border-collapse:collapse;width:100%;table-layout:fixed}.ui-datatable .ui-datatable-caption,.ui-datatable .ui-datatable-footer,.ui-datatable .ui-datatable-header{text-align:center;padding:.5em .75em;box-sizing:border-box}.ui-datatable .ui-datatable-caption,.ui-datatable .ui-datatable-header{border-bottom:0 none}.ui-datatable .ui-datatable-footer{border-top:0 none}.ui-datatable tfoot td,.ui-datatable thead th{text-align:center}.ui-datatable thead tr{border-width:0}.ui-datatable .ui-datatable-data>tr>td,.ui-datatable .ui-datatable-tfoot>tr>td,.ui-datatable .ui-datatable-thead>tr>th{border-color:inherit;box-sizing:border-box;padding:.25em .5em;border-width:1px;border-style:solid}.ui-datatable.ui-datatable-resizable .ui-datatable-data>tr>td,.ui-datatable.ui-datatable-resizable .ui-datatable-tfoot>tr>td,.ui-datatable.ui-datatable-resizable .ui-datatable-thead>tr>th{overflow:hidden}.ui-datatable .ui-datatable-tfoot>tr>td,.ui-datatable .ui-datatable-thead>tr>th{font-weight:400}.ui-datatable tbody{outline:0}.ui-datatable .ui-sortable-column{cursor:pointer}.ui-datatable .ui-sortable-column-icon{display:inline-block;margin-left:.125em}.ui-datatable tr.ui-state-highlight{cursor:pointer}.ui-datatable-scrollable-body{overflow:auto;overflow-anchor:none}.ui-datatable-scrollable-header{overflow:hidden}.ui-datatable-scrollable .ui-datatable-scrollable-footer,.ui-datatable-scrollable .ui-datatable-scrollable-header{position:relative;border:0 none}.ui-datatable-scrollable .ui-datatable-scrollable-header td{font-weight:400}.ui-datatable .ui-datatable-scrollable-body{min-height:0}.ui-datatable .ui-datatable-data tr.ui-state-highlight,.ui-datatable .ui-datatable-data tr.ui-state-hover{border-color:inherit;font-weight:inherit;cursor:pointer}.ui-datatable .ui-datatable-data tr.ui-rowgroup-header td a,.ui-datatable .ui-datatable-data tr.ui-rowgroup-header td span.ui-rowgroup-header-name{display:inline-block;vertical-align:middle}.ui-datatable-scrollable-theadclone,.ui-datatable-scrollable-theadclone tr{height:0}.ui-datatable-scrollable-theadclone th.ui-state-default{height:0;border-bottom-width:0;border-top-width:0;padding-top:0;padding-bottom:0;outline:0 none}.ui-datatable-scrollable-theadclone th span.ui-column-title{display:block;height:0}.ui-datatable .ui-paginator{padding:.125em}.ui-datatable .ui-paginator-top{border-bottom-width:0}.ui-datatable .ui-paginator-bottom{border-top-width:0}.ui-datatable-rtl{direction:rtl}.ui-datatable-rtl.ui-datatable tfoot td,.ui-datatable-rtl.ui-datatable thead th{text-align:right}.ui-row-toggler{cursor:pointer}.ui-datatable .ui-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5em;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.ui-datatable .ui-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.ui-datatable-resizable{padding-bottom:1px;overflow:auto}.ui-datatable-resizable tbody td,.ui-datatable-resizable tfoot td,.ui-datatable-resizable thead th{white-space:nowrap}.ui-datatable-resizable th.ui-resizable-column{background-clip:padding-box;position:relative}.ui-datatable-reflow .ui-datatable-data td .ui-column-title{display:none}.ui-datatable .ui-column-filter{display:block;width:100%;box-sizing:border-box;margin-top:.25em}.ui-datatable .ui-editable-column input{width:100%;outline:0}.ui-datatable .ui-datatable-data>tr>td.ui-editable-column{padding:.5em}.ui-datatable .ui-editable-column>.ui-cell-editor{display:none}.ui-datatable .ui-datatable-data>tr>td.ui-editable-column.ui-cell-editing{padding:1px}.ui-datatable .ui-editable-column.ui-cell-editing>.ui-cell-editor{display:block}.ui-datatable .ui-editable-column.ui-cell-editing>.ui-cell-data{display:none}.ui-datatable-stacked tfoot td,.ui-datatable-stacked thead th{display:none!important}.ui-datatable.ui-datatable-stacked .ui-datatable-data>tr>td{text-align:left;display:block;border:0 none;width:100%;box-sizing:border-box;float:left;clear:left}.ui-datatable.ui-datatable-stacked .ui-datatable-data.ui-widget-content{border:0 none}.ui-datatable-stacked .ui-datatable-data tr.ui-widget-content{border-left:0 none;border-right:0 none}.ui-datatable-stacked .ui-datatable-data td .ui-column-title{padding:.4em;min-width:30%;display:inline-block;margin:-.4em 1em -.4em -.4em;font-weight:700}.ui-datatable .ui-selection-column .ui-chkbox,.ui-datatable .ui-selection-column .ui-radiobutton{margin:0;display:block}.ui-datatable .ui-selection-column .ui-chkbox-box,.ui-datatable .ui-selection-column .ui-radiobutton-box{display:block;box-sizing:border-box;margin:0}.ui-datatable-scrollable-wrapper{position:relative}.ui-datatable-frozen-view .ui-datatable-scrollable-body{overflow:hidden}.ui-datatable-unfrozen-view{position:absolute;top:0}.ui-datatable .ui-datatable-load-status{width:100%;height:100%;top:0;left:0}.ui-datatable .ui-datatable-virtual-table{position:absolute;top:0;left:0}.ui-datatable .ui-datatable-loading{position:absolute;width:100%;height:100%;-ms-filter:"alpha(opacity=10)";opacity:.1;z-index:1}.ui-datatable .ui-datatable-loading-content{position:absolute;left:50%;top:25%;z-index:2}@media(max-width:35em){.ui-datatable-reflow tfoot td,.ui-datatable-reflow thead th{display:none!important}.ui-datatable-reflow .ui-datatable-data>tr>td{text-align:left;display:block;border:0 none;width:100%!important;box-sizing:border-box;float:left;clear:left}.ui-datatable-reflow .ui-datatable-data.ui-widget-content{border:0 none}.ui-datatable-reflow .ui-datatable-data tr.ui-widget-content{border-left:0 none;border-right:0 none}.ui-datatable-reflow .ui-datatable-data td .ui-column-title{padding:.4em;min-width:30%;display:inline-block;margin:-.4em 1em -.4em -.4em;font-weight:700}.ui-datatable-reflow.ui-datatable-scrollable .ui-datatable-scrollable-body colgroup{display:block}}.ui-dialog{position:fixed;padding:0}.ui-dialog .ui-dialog-content,.ui-dialog .ui-dialog-titlebar{padding:.5em .75em;position:relative;border:0}.ui-dialog .ui-dialog-content{background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;float:right}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-titlebar-icon{text-decoration:none}.ui-dialog .ui-dialog-titlebar-close{float:right;padding:.125em;cursor:pointer;border:1px solid transparent}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:0}.ui-dialog-footer{padding:1em;border-width:1px 0 0 0;text-align:right}.ui-dialog-mask{position:fixed;width:100%;height:100%}.ui-confirmdialog{width:30em}.ui-confirmdialog.ui-dialog .ui-dialog-content{padding:1em 2em}.ui-confirmdialog .ui-dialog-content .fa{font-size:1.5em;vertical-align:middle;margin-right:.5em}.ui-confirmdialog .ui-dialog-content .ui-confirmdialog-message{vertical-align:middle}.ui-fluid .ui-dialog-footer .ui-button{width:auto}.ui-rtl .ui-dialog .ui-dialog-titlebar-close{float:left}.ui-rtl .ui-dialog .ui-dialog-buttonpane button{text-align:right}@media screen and (max-width:40em){.ui-confirmdialog{width:90%}}.ui-dropdown{display:inline-block;position:relative;cursor:pointer;vertical-align:middle}.ui-dropdown .ui-dropdown-trigger{border-right:0;border-top:0;border-bottom:0;cursor:pointer;width:1.5em;height:100%;position:absolute;right:0;top:0;padding:0 .25em}.ui-dropdown .ui-dropdown-trigger .fa{margin-top:.3em;margin-left:-.125em}.ui-dropdown .ui-dropdown-label{display:block;border:0;white-space:nowrap;overflow:hidden;font-weight:400;width:100%;padding-right:1.5em}.ui-dropdown-item-empty,.ui-dropdown-label-empty{text-indent:-9999px}.ui-dropdown.ui-state-disabled .ui-dropdown-label,.ui-dropdown.ui-state-disabled .ui-dropdown-trigger{cursor:default}.ui-dropdown label.ui-dropdown-label{cursor:pointer}.ui-dropdown input.ui-dropdown-label{cursor:default}.ui-dropdown .ui-dropdown-panel{min-width:100%}.ui-dropdown-panel{position:absolute;height:auto;display:none}.ui-dropdown-panel .ui-dropdown-items-wrapper{overflow:auto}.ui-dropdown-panel .ui-dropdown-item{font-weight:400;border:0 none;cursor:pointer;margin:1px 0;padding:.125em .25em;text-align:left}.ui-dropdown-panel .ui-dropdown-item-group{font-weight:700}.ui-dropdown-panel .ui-dropdown-list{padding:.4em;border:0 none}.ui-dropdown-panel .ui-dropdown-filter{width:100%;box-sizing:border-box;padding-right:1.5em}.ui-dropdown-panel .ui-dropdown-filter-container{position:relative;margin:0;padding:.4em;display:inline-block;width:100%}.ui-dropdown-panel .ui-dropdown-filter-container .fa{position:absolute;top:.8em;right:1em}.ui-fluid .ui-dropdown{width:100%}.ui-fieldset,.ui-fieldset .ui-fieldset-legend{padding:.6em 1em}.ui-fieldset-toggleable .ui-fieldset-legend{padding:.5em 1em .5em .5em;cursor:pointer;white-space:nowrap}.ui-fieldset .ui-fieldset-toggler{margin-right:.1em;display:inline-block;vertical-align:middle}.ui-fieldset .ui-fieldset-content-wrapper-overflown{overflow:hidden}.ui-fileupload-buttonbar .ui-fileupload-choose.ui-state-disabled input{cursor:default}.ui-fileupload-buttonbar{padding:.5em;border-bottom:0 none}.ui-fileupload-buttonbar .ui-button{vertical-align:middle;margin-right:.25em}.ui-fileupload-content{padding:1em;position:relative;transition:border-color .3s}.ui-fileupload-content.ui-fileupload-highlight{border-color:#156090}.ui-fileupload-files img{border:0}.ui-fileupload-files{display:table}.ui-fileupload-row{display:table-row}.ui-fileupload-row>div{display:table-cell;padding:.5em 1em;vertical-align:middle}.ui-fileupload-content .ui-progressbar{width:100%;position:absolute;top:1px;left:0;height:.25em;border:0 none}.ui-fileupload-content .ui-progressbar-value{border-radius:0;border:0 none}.ui-fileupload-choose{position:relative;overflow:hidden}.ui-fileupload-choose input[type=file]{position:absolute;top:0;right:0;margin:0;opacity:0;min-height:100%;font-size:100px;text-align:right;filter:alpha(opacity=0);direction:ltr;cursor:pointer}.ui-fileupload-choose.ui-fileupload-choose-selected input[type=file]{display:none}.ui-fluid .ui-fileupload .ui-button{width:auto}.ui-fluid .ui-fileupload-content .ui-button-icon-only{width:2em}.ui-galleria{overflow:hidden;visibility:hidden;position:relative}.ui-galleria-panel-wrapper{position:relative;padding:0;margin:0}.ui-galleria-panel{-webkit-filter:inherit;filter:inherit;position:absolute;top:0;left:0;list-style-type:none}.ui-galleria-filmstrip-wrapper{overflow:hidden;margin:.25em auto;position:relative}.ui-galleria-filmstrip{list-style:none outside none;margin:0;padding:0;width:2340px;z-index:900;position:absolute;top:0;left:0}.ui-galleria-frame{float:left;margin-right:5px;opacity:.3;cursor:pointer}.ui-galleria-frame-active{opacity:1}.ui-galleria-frame-content{overflow:hidden}.ui-galleria-nav-next,.ui-galleria-nav-prev{cursor:pointer;position:absolute}.ui-galleria-nav-prev{left:5px}.ui-galleria-nav-next{right:5px}.ui-galleria-caption{position:absolute;left:1px;background-color:rgba(0,0,0,.5);display:none;color:#ededed;padding:.2em 1em}.ui-galleria-caption h4{color:#ededed}.ui-galleria-panel-content{padding:1em 1.4em}.ui-grid{clear:both;padding:0;margin:0}.ui-grid:after,.ui-grid:before{content:"";display:table}.ui-grid:after{clear:both}.ui-grid .ui-grid-row{display:-webkit-box;display:-ms-flexbox;display:flex;clear:both}.ui-grid-row:after{clear:both;content:"";display:table}.ui-grid-col-1,.ui-grid-col-2,.ui-grid-col-3,.ui-grid-col-4,.ui-grid-col-5,.ui-grid-col-6,.ui-grid-col-7,.ui-grid-col-8,.ui-grid-col-9,.ui-grid-col-10,.ui-grid-col-11,.ui-grid-col-12{float:left;box-sizing:border-box}.ui-grid-col-1{width:8.33333%}.ui-grid-col-2{width:16.66666%}.ui-grid-col-3{width:25%}.ui-grid-col-4{width:33.33333%}.ui-grid-col-5{width:41.66666%}.ui-grid-col-6{width:50%}.ui-grid-col-7{width:58.33333%}.ui-grid-col-8{width:66.66666%}.ui-grid-col-9{width:75%}.ui-grid-col-10{width:83.33333%}.ui-grid-col-11{width:91.66666%}.ui-grid-col-12{width:100%}@media(min-width:480px){.ui-grid-fixed{width:480px}}@media(min-width:768px){.ui-grid-fixed{width:768px}}@media(min-width:960px){.ui-grid-fixed{width:960px}}@media(min-width:1024px){.ui-grid-fixed{width:1024px}}.ui-grid.ui-grid-pad>.ui-grid-row>div{padding:.25em .5em}@media(max-width:640px){.ui-grid-responsive .ui-grid-row{display:block}.ui-grid-responsive .ui-grid-col-1,.ui-grid-responsive .ui-grid-col-2,.ui-grid-responsive .ui-grid-col-3,.ui-grid-responsive .ui-grid-col-4,.ui-grid-responsive .ui-grid-col-5,.ui-grid-responsive .ui-grid-col-6,.ui-grid-responsive .ui-grid-col-7,.ui-grid-responsive .ui-grid-col-8,.ui-grid-responsive .ui-grid-col-9,.ui-grid-responsive .ui-grid-col-10,.ui-grid-responsive .ui-grid-col-11,.ui-grid-responsive .ui-grid-col-12{width:100%;float:none}}.ui-g{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.ui-g:after{clear:both;content:"";display:table}.ui-g-1,.ui-g-2,.ui-g-3,.ui-g-4,.ui-g-5,.ui-g-6,.ui-g-7,.ui-g-8,.ui-g-9,.ui-g-10,.ui-g-11,.ui-g-12{float:left;box-sizing:border-box;padding:.5em}.ui-g-1{width:8.3333%}.ui-g-2{width:16.6667%}.ui-g-3{width:25%}.ui-g-4{width:33.3333%}.ui-g-5{width:41.6667%}.ui-g-6{width:50%}.ui-g-7{width:58.3333%}.ui-g-8{width:66.6667%}.ui-g-9{width:75%}.ui-g-10{width:83.3333%}.ui-g-11{width:91.6667%}.ui-g-12{width:100%}.ui-g-offset-12{margin-left:100%}.ui-g-offset-11{margin-left:91.66666667%}.ui-g-offset-10{margin-left:83.33333333%}.ui-g-offset-9{margin-left:75%}.ui-g-offset-8{margin-left:66.66666667%}.ui-g-offset-7{margin-left:58.33333333%}.ui-g-offset-6{margin-left:50%}.ui-g-offset-5{margin-left:41.66666667%}.ui-g-offset-4{margin-left:33.33333333%}.ui-g-offset-3{margin-left:25%}.ui-g-offset-2{margin-left:16.66666667%}.ui-g-offset-1{margin-left:8.33333333%}.ui-g-offset-0{margin-left:0}@media screen and (max-width:40em){.ui-sm-1,.ui-sm-2,.ui-sm-3,.ui-sm-4,.ui-sm-5,.ui-sm-6,.ui-sm-7,.ui-sm-8,.ui-sm-9,.ui-sm-10,.ui-sm-11,.ui-sm-12{padding:.5em}.ui-sm-1{width:8.3333%}.ui-sm-2{width:16.6667%}.ui-sm-3{width:25%}.ui-sm-4{width:33.3333%}.ui-sm-5{width:41.6667%}.ui-sm-6{width:50%}.ui-sm-7{width:58.3333%}.ui-sm-8{width:66.6667%}.ui-sm-9{width:75%}.ui-sm-10{width:83.3333%}.ui-sm-11{width:91.6667%}.ui-sm-12{width:100%}.ui-sm-offset-12{margin-left:100%}.ui-sm-offset-11{margin-left:91.66666667%}.ui-sm-offset-10{margin-left:83.33333333%}.ui-sm-offset-9{margin-left:75%}.ui-sm-offset-8{margin-left:66.66666667%}.ui-sm-offset-7{margin-left:58.33333333%}.ui-sm-offset-6{margin-left:50%}.ui-sm-offset-5{margin-left:41.66666667%}.ui-sm-offset-4{margin-left:33.33333333%}.ui-sm-offset-3{margin-left:25%}.ui-sm-offset-2{margin-left:16.66666667%}.ui-sm-offset-1{margin-left:8.33333333%}.ui-sm-offset-0{margin-left:0}}@media screen and (min-width:40.063em){.ui-md-1,.ui-md-2,.ui-md-3,.ui-md-4,.ui-md-5,.ui-md-6,.ui-md-7,.ui-md-8,.ui-md-9,.ui-md-10,.ui-md-11,.ui-md-12{padding:.5em}.ui-md-1{width:8.3333%}.ui-md-2{width:16.6667%}.ui-md-3{width:25%}.ui-md-4{width:33.3333%}.ui-md-5{width:41.6667%}.ui-md-6{width:50%}.ui-md-7{width:58.3333%}.ui-md-8{width:66.6667%}.ui-md-9{width:75%}.ui-md-10{width:83.3333%}.ui-md-11{width:91.6667%}.ui-md-12{width:100%}.ui-md-offset-12{margin-left:100%}.ui-md-offset-11{margin-left:91.66666667%}.ui-md-offset-10{margin-left:83.33333333%}.ui-md-offset-9{margin-left:75%}.ui-md-offset-8{margin-left:66.66666667%}.ui-md-offset-7{margin-left:58.33333333%}.ui-md-offset-6{margin-left:50%}.ui-md-offset-5{margin-left:41.66666667%}.ui-md-offset-4{margin-left:33.33333333%}.ui-md-offset-3{margin-left:25%}.ui-md-offset-2{margin-left:16.66666667%}.ui-md-offset-1{margin-left:8.33333333%}.ui-md-offset-0{margin-left:0}}@media screen and (min-width:64.063em){.ui-lg-1,.ui-lg-2,.ui-lg-3,.ui-lg-4,.ui-lg-5,.ui-lg-6,.ui-lg-7,.ui-lg-8,.ui-lg-9,.ui-lg-10,.ui-lg-11,.ui-lg-12{padding:.5em}.ui-lg-1{width:8.3333%}.ui-lg-2{width:16.6667%}.ui-lg-3{width:25%}.ui-lg-4{width:33.3333%}.ui-lg-5{width:41.6667%}.ui-lg-6{width:50%}.ui-lg-7{width:58.3333%}.ui-lg-8{width:66.6667%}.ui-lg-9{width:75%}.ui-lg-10{width:83.3333%}.ui-lg-11{width:91.6667%}.ui-lg-12{width:100%}.ui-lg-offset-12{margin-left:100%}.ui-lg-offset-11{margin-left:91.66666667%}.ui-lg-offset-10{margin-left:83.33333333%}.ui-lg-offset-9{margin-left:75%}.ui-lg-offset-8{margin-left:66.66666667%}.ui-lg-offset-7{margin-left:58.33333333%}.ui-lg-offset-6{margin-left:50%}.ui-lg-offset-5{margin-left:41.66666667%}.ui-lg-offset-4{margin-left:33.33333333%}.ui-lg-offset-3{margin-left:25%}.ui-lg-offset-2{margin-left:16.66666667%}.ui-lg-offset-1{margin-left:8.33333333%}.ui-lg-offset-0{margin-left:0}}@media screen and (min-width:90.063em){.ui-xl-1,.ui-xl-2,.ui-xl-3,.ui-xl-4,.ui-xl-5,.ui-xl-6,.ui-xl-7,.ui-xl-8,.ui-xl-9,.ui-xl-10,.ui-xl-11,.ui-xl-12{padding:.5em}.ui-xl-1{width:8.3333%}.ui-xl-2{width:16.6667%}.ui-xl-3{width:25%}.ui-xl-4{width:33.3333%}.ui-xl-5{width:41.6667%}.ui-xl-6{width:50%}.ui-xl-7{width:58.3333%}.ui-xl-8{width:66.6667%}.ui-xl-9{width:75%}.ui-xl-10{width:83.3333%}.ui-xl-11{width:91.6667%}.ui-xl-12{width:100%}.ui-xl-offset-12{margin-left:100%}.ui-xl-offset-11{margin-left:91.66666667%}.ui-xl-offset-10{margin-left:83.33333333%}.ui-xl-offset-9{margin-left:75%}.ui-xl-offset-8{margin-left:66.66666667%}.ui-xl-offset-7{margin-left:58.33333333%}.ui-xl-offset-6{margin-left:50%}.ui-xl-offset-5{margin-left:41.66666667%}.ui-xl-offset-4{margin-left:33.33333333%}.ui-xl-offset-3{margin-left:25%}.ui-xl-offset-2{margin-left:16.66666667%}.ui-xl-offset-1{margin-left:8.33333333%}.ui-xl-offset-0{margin-left:0}}.ui-g-nopad{padding:0}.ui-growl{position:fixed;top:20px;right:20px;width:20em}.ui-growl-item-container{position:relative;margin:0 0 10px 0;opacity:.95;filter:alpha(opacity=95)}.ui-growl-item{position:relative;display:block;padding:.5em 1em}.ui-growl-item p{padding:0;margin:0}.ui-growl-icon-close{position:absolute;top:4px;right:4px;cursor:pointer}.ui-growl-title{font-weight:700;padding:0 0 .5em 0;display:block}.ui-growl-image{position:absolute;display:inline-block;left:.5em;top:.25em;padding:0}.ui-growl-message{padding:0 0 .25em 0;margin-left:2.5em}.ui-growl-message p{font-weight:400}.ui-inplace .ui-inplace-display{display:inline;cursor:pointer;border:0 none;padding:.25em;font-weight:400}.ui-inplace .ui-inplace-content{display:inline}.ui-inputswitch{padding:0;position:relative;cursor:pointer;height:1.5em}.ui-inputswitch,.ui-inputswitch .ui-inputswitch-off,.ui-inputswitch .ui-inputswitch-on{display:inline-block;overflow:hidden;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none}.ui-inputswitch .ui-inputswitch-off,.ui-inputswitch .ui-inputswitch-on{white-space:nowrap;position:absolute;top:0;width:auto;font-weight:700;height:100%;line-height:1.5em}.ui-inputswitch .ui-inputswitch-on{left:0;border:0 none}.ui-inputswitch .ui-inputswitch-off{right:0;text-align:right}.ui-inputswitch .ui-inputswitch-off span,.ui-inputswitch .ui-inputswitch-on span{display:inline-block;text-align:center;height:100%;line-height:inherit}.ui-inputswitch .ui-inputswitch-handle{display:block;width:0;position:absolute;top:0;left:0;height:100%;border-top:0 none;border-bottom:0 none}.ui-inputtext{margin:0;outline:medium none;padding:.25em}.ui-inputtext,.ui-widget-content .ui-inputtext,.ui-widget-header .ui-inputtext{font-weight:400}.ui-fluid .ui-inputtext{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-inputgroup{display:-webkit-box;display:-ms-flexbox;display:flex}.ui-inputgroup .ui-inputgroup-addon{display:inline-block;text-align:center;min-width:1.5em;padding:.25em;border-width:1px;border-style:solid}.ui-inputgroup .ui-inputgroup-addon+.ui-inputgroup-addon{border-left:0 none}.ui-inputgroup .ui-inputtext{padding-left:.5em}.ui-inputgroup .ui-inputtext:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;border-left:0 none}.ui-inputgroup .ui-inputtext:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0;border-right:0 none}.ui-inputgroup .ui-button{margin-right:0;border-radius:0}.ui-fluid .ui-inputgroup .ui-button{width:auto}.ui-fluid .ui-inputgroup .ui-inputtext{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.ui-inputgroup .ui-chkbox,.ui-inputgroup .ui-radiobutton{margin-right:0;vertical-align:bottom}.ui-float-label{display:block;position:relative}.ui-float-label label{font-weight:400;position:absolute;pointer-events:none;left:.25em;top:50%;margin-top:-.5em;transition:all .3s ease;-moz-transition:.3s ease all;-webkit-transition:all .3s ease;color:#898989;line-height:1}.ui-float-label .ui-inputwrapper-filled~label,.ui-float-label .ui-inputwrapper-focus~label,.ui-float-label input.ui-state-filled~label,.ui-float-label input:focus~label{top:-.75em;font-size:12px}.ui-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.ui-inputtextarea-resizable{overflow:hidden;resize:none}.ui-fluid .ui-inputtextarea{width:100%}.ui-float-label textarea.ui-state-filled~label,.ui-float-label textarea:-webkit-autofill~label,.ui-float-label textarea:focus~label{top:-.75em;font-size:12px}.ui-lightbox{position:fixed;display:none}.ui-lightbox-content-wrapper{position:relative}.ui-lightbox-content{position:relative;margin:0;padding:0;background-color:#000}.ui-lightbox-nav-left,.ui-lightbox-nav-right{position:absolute;top:50%;cursor:pointer}.ui-lightbox-nav-left{left:0}.ui-lightbox-nav-right{right:0}.ui-lightbox-loading .ui-lightbox-content{background:url(data:image/gif;base64,R0lGODlhIAAgAPYAAAAAAOLi4gMDAyMjIyAgIAEBATw8PHBwcGdnZzc3NwcHBxMTE2hoaHFxcVNTUxUVFX5+fpmZmW5ubhcXFwoKCnNzc1FRUUdHR7Gxsa6urqmpqYODgx4eHggICHV1dU5OTgUFBTAwMKysrIGBgREREVVVVXd3dzg4OCcnJ7Ozs7CwsEhISDExMSwsLA4ODiUlJbe3t0FBQTo6OkxMTAwMDICAgGBgYCEhIRgYGGpqatHR0dPT08HBwdXV1bm5uVhYWBoaGhwcHBAQEEVFRVdXV1xcXIqKimNjY15eXqOjo56enpqamqWlpaCgoGFhYSoqKqGhoaenpygoKDU1NZycnFpaWsrKyr6+vrW1tc7OztDQ0D4+PpGRkZeXl1BQUHx8fJOTk46OjomJiZCQkJWVlcPDw8XFxcfHx7y8vC4uLjMzM4WFhUBAQIeHh7q6ukpKSszMzIyMjMnJyXp6enl5eUNDQ8DAwGxsbKqqqmVlZdfX1wAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAFAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKECzk2NJOCDxchgwU1OjsSmQoQGCIWghQiOz01npALERkYGQ4AFBqtP4ILN0ACjgISGhkpGDIANjw+KABCKNEujxMbGiowowAEHIIT0SgUkBwjGiIzhkIvKDiSJCsxwYYdmI8KFB0FjfqLAgYMEiSUEJeoAJABBAgiGnCgQQUPJlgoIgGuWyICCBhoRNBCEbRoFhEVSODAwocTIBQVwEEgiMJEChSkzNTPRQdEFF46KsABxYtphUisAxLpW7QJgkDMxAFO5yIC0V5gEjrg5kcUQB098ElCEFQURAH4CiLvEQUFg25ECwKLpiCmKBC6ui0kYILcuXjz6t3Ld1IgACH5BAAFAAEALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Ohw8Tj44XKlhbk4sKEVZZXAWZgwsxLYMdTJ1RCqEAIA1JSjOCFKhaUSCCoI8kRkpMULIKVFZaXaALN0C6jAVHS01RTFMAVVc8XgBCKNsujwsmS1AaCIJSpQAT2ygUk0AeS0oXhkIvKDihQjEyy4QdNJMgOqxqxC9RCyJFkKwYiKgAkAEE2CWi4CChDSdSFJFQx0ERiCEWQlq4oUjbto6KgCQwIOOJAEUFcBAIInGRgIKsGrrogIhCzUcFgqB40a0QiXpAMj1QJ6kVLgA41P1kxGHbi39HB/A0iaKoo6MvSAgisC0pAGRBXk4SOOjGtiCDFXCGSodCSM6GC7ze3cu3r9+/gAcFAgAh+QQABQACACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjoYkTj8Uj40SPGUMlYsdSzxmSiCbg0IyKIM0TTxnTAqjACAIYGNDgh1Uq1CiAB2VLl9hZGAXsGSrXAUKEjNABY4FRGJjXV0sAD8+aB8ANmItKC6PJAxiXBFIAAIhIYJVUygolI8TCNIxhkAvKDijLidTzgx1oLEJxC5GAReRkLFixZSDhwoAGUBAXiIWQy6smMFBEQl4KDoqenKi5Al+iYSAFJmIwgAUL5opKoCDQBCLM189c9HrEAWcz4LADFeIhD4gmxaAnCDIoCAcIIEuEgqToNEBvVTCI+rIxYAXJAQRgIcUwIIbQQQUPHiD7KCEOhMBTIAnJG7EBVzt6t3Lt6/fvYEAACH5BAAFAAMALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2OhiRVDhSPjQhYPkeViwpjWG5dIJuDBTdBgxRkWGhKCqOCK18QW4IdXKsRogAPHY8FNl8bG2wAIEarRgUKDW4ROI8XHl9rbS0ADhkYbwBIWj1wU48uPx4QYg4ABS1pgm09ZUc0lQtE5SeGR1hEz5sUIWkFDAkAIq9SAQGOAjIC8YLFFBQIExUAMoAAJUU41oVQs0ARCRQgOSyaABKkC0VCSopUJADHjRsTFhXAQSDIRZmvErrodYjCTV9BULw4WYjECxRANn0EGbNYRBwlfzIiKVSe0Ru9UpqsRGHAABKCCIBMCmCBqYiPBKC9MZZUTkJUEIW8PVRgAdG5ePPq3ctXbyAAIfkEAAUABAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6GQhZDHY+NSFEiRZWLCmtRGXEgm4QgCoMdYhoZYKajAA9ETmqCnRoqY6IACy6VCQgHDQkAIBAaGCMAChIpShyPTzYMDR4oADNQUUMAVXJZOj+PHRdOOR4rAAVST4Ij3joXlS7jOSyGNnA7YRSbHSgvhyAMvBHiqlEBgxNu3MCxqACQAQT2KXKBoiIKGopIWHQ20eJFRUI2NsShcMJIAkEkNixo0AWlQxRUPioQxB+vQiReoACySWNFk8MECMJhUSajCRVfYMx5g1LIijcdKSAwgIQgAhV56roBRGilAgcF3cg6KCxLAEhREDxbqACJqGwI48qdS7fuqEAAIfkEAAUABQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6GLitsCo+NJRFUM5WLICYRTSMCm4kdc59iIIIgLw+VT2woggp0EVBrogtfblFSjhNeP0hpAAINEUl0AApfZWdyTr4rFkVOBAB1YBFsAD92zlZ1jiBTbw42WwAFL7ECRmZycEYUjxRqbyW9hUfwRiSbIEGCHKLwxoKQUY1AUCjQiAQBAhMWFWjRgkCHRRRQaERBQxGJjRwwbuSoSAhIRg9u3IioqAAOAkAuMmKIsFEBFzINUZi3qUAQFC9cGCKxDsimjxpZghAFAMdGno4eaHzRkeiNiyY1Cn0EgsAAfwAIaDQKYMENIEwr0QRwY+ygtTUUAUzQeDCuoQIkttrdy7ev3799AwEAIfkEAAUABgAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6GBQMDj45sI20ylIsgDG1jBwWaiQp3nl8ggiAyQxSPJCgPqZ1cdAIAJB4pbkeOCmoxF5MCR21cEgAKFTBodmO2jB0hqzM4ADIjRpkOKcw8P48cLAYrIQAFN5MFI252ZRutjiAELFschkVXZWskmgUkC4coXPjgQlQjEDj4MSJBgMCERRPA2MlgYJGCFygy0lCE5MwVH21QjcKoUREBNglY3GC04MaNh4oK4CAARIHBm4gKuOiAiAI8SgWCoHhRsBAJjEA0vcoIE8QzHBlR/Gz0IOOLjUdv8BQStWg8AjcUEsiYFEBLIM+ADrpBdlAonIIRJmQUAhcSCa918+rdy7evqEAAIfkEAAUABwAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6HIAKPjkFFP0CTjB8VXx+ZigI/FRAMkgACCWwdjwVCNIICRKMHkkJ3URlIj0FPITgABQ4VNUcFIDl4KiliposCLygtUyQAIXd0LQAzuClYDo9AKFIhN4ITmAV0GSkwX6uOIBziC4ZEKT4QQpmtr4YddStcfGoEYoI+RkIIEJiwaEIYNxpkLAIBDQWKfojy6NiYRIEiihYvKjrSo2QTEIsW3LjBUNEDD1SohBgIqlmjAi7eGaJA4VOBICheCCxEAhqmSSRCtowkCEfIno8eWHzxquiNVUJCDoVH4AY1AAQsHlUJpIDPQTfEDjJLc9AEiwcP2xYqQGKr3Lt48+rdizcQACH5BAAFAAgALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CHCmkhCpGLU0gMMpeJBUOaPwWCAiwyHZAdlgACF0g5NgIALkcRTSWPEy8DQgAFdUh3uCBOVFBMELKMBTcoKC8UAC8/CC8AQ11NTBozj0DOKA+CJOIFEtp4FaiOIBzPLoZeTHge8JAFLtGGHVt1NJ2MQEzoxUgIAQITFj1og4EJm0UCBoD7l8iGHCtWlIBQFHGiIhtZQmpcZPBGQkUPxIhY8hDgoQIUlDnCt84QBX33grwzROIFCiCRSIA7CUIZDnA4Gz1w9uJfzxuohICzx47ADRKCCDgDCmDBDRyjIoUF0OznoLEuJzgj6LJQARJUCtvKnUu3rt25gQAAIfkEAAUACQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkIgkC5GMHEMzN5WKLBcOQ4MCL2oKkCAgggWdJR8FADREbWMfjyQvA0KCaRdEFwACJUZcXQ2ujRwoKC8UAEB1FhwABrJdS76OOMkoD4I0JIJOY11UOaWOIMgvNIYXZOTrkAUuzIYKJ1vwm4oCD0FCxomEECAwYRGQGhpUJPmSz5CAAdoaGrpjpyKPKzISFYCYTGIhBGZCmrFjQJELAjcKKnqwIQoTJk4E6DNUoIPNR/I6IGIxRGe8IMpcGCKR4EsbobW0qQQhE0A2KQ5QQHqQTB0AWzd0CtGW6xEIlN8AEEgGRNCCGzgA4hx0g+wgtfoTJiTrOrNQARJI6+rdy7evX76BAAAh+QQABQAKACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QiCACkYxCTywklYoEaTIsgwUcQJEgBYM3aQYygh1vHiYtj0IvN0KCnVtTAAUrJhBrDo8cKCgvFABCLQYTAGoVwGJbjzjFKA+CCjSCDl9rRkgKjyDEL9uFWxtxNuePBS7IhiAsJ/GbigILQED2iEIEBJop4jCHShImYlAkEjDAWrtDOVKkwEIRwilEBBwquuOmY0cIilwQuCEwEQ4ISpRQmUPgnqECHWJeZPSuwyEQQ4bYhFQgiDEXhhxo0TIG6CMS1gROEpQGih4dMSA9KGYOAIlaNoUYwKOHCCQQIzUByIiCFIAFMiqUdIeqmFleLhQHTSh2K26hAiSM2t3Lt6/fv5sCAQAh+QQABQALACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QiAWRjRQ3BAqUihwoKByEIJOQBaIABJ0vggoJRBeZjjQ3N0KCp1IDAAUyRzkHKI9BqBQAQgMoLgBSNgwNDZ+OOJ0oC4Igr3XMJl6ljCCcL8OFagd0Dh2RBS7hhSBPIeeaiwIkODjriC4EBBOLQAdjZLpAwJXoVCcaio4wicJQgwdFBlEgTJQng0WLDxNRIHCDn6IJHsiAAVPhWTxCBTp0eNUoHbxCAmLEeOmoQLAXyAoxsCLHSE5HJKR5BCFAUJgdWqywgfQAFUISL26cQ6IDqQNIIDiSqNUJCAAFDdyI8Thq0I2ugx4UPQlgQidabA4LFSDxM67du3jz6qUUCAAh+QQABQAMACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKECkBAApOJQCgoD5mDBQWDBJwcggUDUwSQHTc3QoKkKEGCTzMODjSPOJwvHQBCAwMUAEErDkVVLo8TnCgLggIggiwWRUd1kCAcKC/EhVJVeRcKkQUu34UCNwPln4kFQg8Pv4oUBAQTixN5NW1iDVYlkoVCV6IfZLp0iRAhhyKCBhEVaUKR4h17BG7oU/TgjpiPOWi9o6TAXaNz9dRt2ZLSUYEg3ZYVysPjyoaIjUg42wgCEwAjVs7YMQDpQS9dJF7c+FXESlAv2jKSiMUJCAAFErBwMWVu0I2qgxZMe9cMBayRhAqQkIm2rdu3cATjNgoEACH5BAAFAA0ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQKQDgCk4k4KCgPmYMFBYMEnByDJBwUkB03N0KCpChBgkAsBiGQE5wvHQBCAwOqJCEydWyYjg+cKAuCAiCCHMUzuI8CHCgvqoU4dR8J0JAFLtuGOEHhn4gFNCQkyIkUBAQTiwtEBx4mSECKsSg0FH3YsKaNQST+lgVM5GDMmDAObSiSd6OeIhJHvnyZYwOHukIKFKRjNK6XIQpvLph8VCBINheGjrjBMufVIxLLLIIIKIALDzQ+6Ch4pCxbQBIvvrABgIQHjytYTjwCQeAGCVgoPJApoOBLmadeIokSdAMFka0AaHjAomTAJ10XFIiA4nD1UwESC0Z+3Mu3r9+/kAIBACH5BAAFAA4ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQCEwsFk4k4KCgLmYOYgwScHIMULpEdBDdCgqMoQYITLyg4kBOcLx0AQgMDFLycLS+QC5ydggIgsigtakCQBRwoL8CFQi1TKKGPBS7WhkKXn4unHdyIFAQEE4tCK0VONh+tia8oNIoxBw0VFR5bFN3Ll+jCl4MHYyhSd6OdIiFEJNy54wAVOUIgMnZzscuQixVsOnYLQs0iIRsZNDQw2YjEMYdPSinggkUFngMiGT3IlQ+ICjQBq/jAggGPl0cgVpEQ9ELFjjEFQHgYimGEgGiDWvjYQQaTEAg+Uvz49OKKjiKm2IT8ROFIlZwXCOPKnUu3LqRAACH5BAAFAA8ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQFJCSTijgoKAuYiASbHIMdHZEKHARCgqAoQYITLy+Xjw+bL6VCAwMUAEKbrZALv50AAiCvv6qPBRwoL7yFvig4kgUu0IYUNJ6MChTHixQEBBOLHVMrHytSi6wo24ksVUVISD/wn7/4h1MM/gw2XCgSd6PcwDdIbBBhx62QAAUClrkoZYhGDBkKIhUI4kxgoR9NIiDYx4jEr3ICWrgCIUYDFCp5KDaq5WxbDjlYDABwIEJDEiorHoEgcOMSBRU64BgpAEJCzyQmCkCSCoAEjKRhpLrwICKKBU9tkv4YRMEARk8TjvyQ2bCt27dwBONGCgQAIfkEAAUAEAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAUkJJOKEygoC5iIBJscgyAgkQocBEKCoChBgg8vAzSQD5svHQBCAzcUuZsoOJALv50AAgKCmpuqjwUcKC+9hUKbwZEFLtKGFLOeiwIgBYwUBAQT3y9qCSzMiawo3Yg3dUMXFyeL7/GHUhb+FgYWUeBw45yiDgZmvIlxyVshAeKaucBliIYMNaUgFQgCzYUhL2PaVNHWiMSvcwKeAAEA4ksELnGqKHhUC9osBDxE4PtAJQKYODEegSBw4xIFPFbKbCgAIo8SnzkiOoooBEPSNuJo3KHS5Y2nEVZ4lBjUIc2UmZgm2HCA1qHbt3AF48qVFAgAIfkEAAUAEQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAUkQpOKDygoC5iIBJscgyAFkQocBJcAoChBgg8vNx2Qmigvs0IDNxQAQpsoD5ALv50AAgKCE7+qjgUctryFQi8oOJIFLtGGHTSejAWljBQEBBOLBUADA0DIiqwo3YkPTy1padbuv/GIQTL+Mq4UUeBww5wiEC1OnJACwpshcJCwzdrG4knDiEFQSAlh6AIEDx8mOnKx6cgcYyFQGDvQpgadDxcbaXqDxQsAJz7wGAAwJE6bEXMSPALxQgwDARSS2IFhwliVMD9/QBJQDAcWOz7aIKPgxEibGJgWqMCqVZCCjTEjUVBix80dh4UQLuChkgZuoQck7Ordy5dQIAAh+QQABQASACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBSQuk4oPKCgkmIgEmxyDAgWRChwEQoKgKEGCDwMEIJCaKC8dAEIDNxS5mygLkAu/wQCkghO/qo8FHLa9hUIvKDiSBS7Qhh00noyljRQEBBOLBUC71YusKNyJw7/Zn7/tiO+b8YcUHDfkigVBLwak60bwWhABhkCguIEQUrMiWH4YksHAxhYFkIQgMLMDgrE0L4w5qXDnCJuGjWZY6QFnBoAiGZQkAGBgDsk8LR6lyeAmj4AOS1LguWPMyxwPEthAIvFAEAkmKUR8KdXBgok7UjA9jVrjm4AbrjC5aJIigwmChTxEfYOW0IISbwgwtp1Lt66gQAAh+QQABQATACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyDBZIKHARCgqAoQYIPAxwCkJooLx0AQgM3FLibKKmPC74LggKkABO+vI8FHLXLhEIvKDiSBS7QhR00nozHjBQEBBOLBUC6xIurKNyJwpu26r7tiEK+8YoUHDfkigU4BDgA60YQSAkZsgoJCILjm6MJSXrIKWEohIMVaRI6qrJDB5w5AAQ8uSFoho0SH1pAMqEjS5kVAIg0GcMCgBoENoh8ePCohYYUTgR0GBNliRMABergJAIEkpB0QpZEoXKAFIgtPwyAwBQ1ipIK3255okHG6x2Che54rYOWEIkPdQi2tp1Lt66gQAAh+QQABQAUACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyDBZIKHARCgqAoQYILN0ECkJooLx0AQgM3FLibKKmPC74LggKkABO+vI8FHLXLhEIvKDiSBS7QhR00nozHjBQEBBOLBUC6nYurKNyJwpsDsorr7YhCvvGLFBw35IoFOAhwqNetGw4HJ+QVInEp0gQlWXhYMHRDBosg3xodgSOnTAUABV60AnBixZYpIx15kGPGzRAAXrjUeAJAioUVbNSAePQECp4iAhSs6WKkBMgpXlac2PlICDEALsJ0iXOElIAXCaphchGnS5g8GbvREOPVRsFCR7waOBvtggGmbAbjyp0LIBAAIfkEAAUAFQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiIBJscgwWSChwEQoKgKEGCCzdApI+aKC8dAEIDNxS4myi8jwu+C4ICshO+wI4FHLXKg0IvKDiSBS7PhB00noyyjBQEBBOLBUC6qYurKNuJJL433ogDagkxnYlC7/GHLWFNJrcSFcBBIAi7RR2E7ONGCAeRISAOubgUKUgXM24cGKIV6xGJMGWu+JAAoAABagBQhJCC4sEjByHdqFgB4EINCQMABDmxksAjCXbcpMgjQIGJNSZopuQpypGUCFGK3KJRYw0djSWBAFEAycU4QTQgrJlDhCEhCnPWfLFglpADtWoN2g6iIIOFALl48+YNBAAh+QQABQAWACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyDBZIKHARCgqAoQYILN0Ckj5ooLx0AQgM3FLibKLyPC74LggKyE77AjgUctcqDQi8oOJIFLs+EHTSejLKMuTcTiwVAupeKQmBKNRI3iiS+BIskKT09Ox/o8YwXTCk12AoVwEEgSMBDHVx442ZogoUYIA65OAcJyBgfKvIVgoci1iMhbXykEJEHADliAIAMe+QExkgodQBskVClFUcUohqB4JIiQxQHBUAwaODkhKAJ0h48YpBBg5OIFCQ0yBNTEAWKjSjIOKHA6p0GCIYwJAQiD9gtYwkZOOAkZ1qTHAeovZ1Ll24gACH5BAAFABcALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQFQi6Tig8oKCSYiASbHJ4ACkEEQoKgKEGCJARABZCaKC8dAEIDNxS3myi7jwu9C4ICsQATvb+OBRy0yoNCLyg4kgUuz4QdNJFCqI3GjCsYMGudiQVAuduKQhg772+KJL0EiyQZWVlwM+y9ootDmoiYg61QARwEghQ8pMAFuFGGHswwAOIQhYWLcLQRAeWCIRLSYD0SAgEPEypVWl0CAETYoyomlXAxAEDNjyHDhPQC4ghEGyZNuswoIIBIkRlSBD148cJbIydNIhCpSMNGkQ8sBnVQAKnDFDVcAXQoUsSLGoiEBHwoYgEFWkI4DS4kWPdW0MO6ePPWDQQAIfkEAAUAGAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiIBJscngAKQQRCgqAoQYIkBEAFkJooLx0AQgM3FLebKLuPC70LggKxABO9v44FHLTKg0IvKDiSBS7PhB00kS6ojcaMQyIYI52JBUADBNiGQnhWcHAXiiS9oopCUWZmZW/49oxidEnigR0lHASCGDSkgAa4UYYWXEgg4BCFhYomzFHChY0hEtKAQHJRgQqZOF4E0VAgCEgvb40cLCETZoQaAFJipNklpNcERyDm0FwTo4CAIUPUUAPw4MUAjIaIhGnzpmKHGUOm3CMFAlKHEC2MgbgwJMFWiIJYDDkxDO0gBTcKfrqdS7euXUOBAAAh+QQABQAZACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyeAApBBEKCoChBgiQEQAWQMi0oLx0AQgM3FLibKLyPORC0C4ICsQATvsCOQFBfT8yDQi8oOJI4DsWHHTSPBS4kQgKNyIokXxoZIhuoiQVAAwS3iV52djw8ZQ7nvqKJM9wIFOhFkRBfrBKRoNMEypIGl97heKVgUSUSEUchIsEmBDlDFKQ5WnAgTo0EhkhUAwKJBoI4G+jUEaQAhCAgvtw1emNkwxwJTwAEeTLg1sFN2xgJkLDhS4UTAAqwoMUSwAN5FR3NcMqGnAA1tP4BOAZJgZQXyAqkoaqxEJAnLw1EtqWQta3du3jzKgoEACH5BAAFABoALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQFQi6Tig8oKCSYgx0FgwSbHJ4AaU0/QoKjKEGCJARAoY9zPSkGHQBCAzcUu5sov48SOz1GD4ICtBPBw444STtlT4ZCLyg4kjg/bLSFHTSPBTSWAo3fiSwbTUxJX52JBUADBLqIIEZY+zAwSIokgr3CtyGDQYMOFAkJBkRRiw1kyIxhEA9RARyyQCwCIUSIOFOJXCR4km4QhWePSDiZc6eFIRLYGj6iUIXOgTwJBIHQCABHsI+N2Jg4gODHDQAwB+hauGnBIyIHGCBxCaCVzAX1eDZSk6eImlAFbmwaCKBASUYTkonapA0kIV4EDRS4LWR2rt27ePMeCgQAIfkEAAUAGwAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiDFEKDBJscngAtTSlFgqMoQYIkBEAFkB5ZOlYGAEIDNxS7myi/jwxwWjsSggK0ABPBw444VHBnF4ZCLyg4khMlW8yFHTSPBTRCNOCK6Yhpc2RLER6hiQVAAwQdiSA1UVEaGniIKCIR7BUiAXSaKFQ4Q5GQYEAUSTHRps0IG/MQFcAhC8QiEC5cQDN1iEaaG+sEURjpyIWFPD9uGCKRLeIjEG+OVPmAQhAIjwBwBBvnCIWTKl5iPABAc0C+h5s6Fa1i4cIAVptsLrgHtJGCE2xkAihwY5PBsSkZCSDEYdMCkoUOKHDg0BWu3bt48+pdFAgAIfkEAAUAHAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiDNEKDBJscngAtUBlVgqMoQYIkBEAFkAdmVmUyAEIDNxS7myi/j0c8Z1Y5ggK0ABPBw44TZDx2dYZCLyg4khNeMsyFHTSPBRQuNOCK6YhSB2JhcTnjiQVAAwQKiQIVXV0RS0suKCIRDIi+O2MSJhyiSEhBRQMYmDDRwME8RAVwyAKxSAAFGh1MKerwwuAhCtAeUYjhhc0DQySymXx04kOdKdsAgOAIAMezRyRW1DnxZFzMASEdbrrkyAUbGWleAmhlcsGNIAIg2esEoMCNTa8ErZsUZNMCkYUUBJkwFq3bt3AF48pFFAgAIfkEAAUAHQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShA8XLpOECxOEX01SJJgAU0l4JYIUKkpSHKEVblduRAAUGWQoQYIkBEAFj04wbnZoBgBObTcUAEIozMmOD2EwaDwVghO9ABPMKM6ON9E+FoZCLyg4kg8fFwKHHTSQ7hTYi/OJL0dzEBBO74kFQAMIKEgkIM+aNm3EGGGjiMQ2IP6QfJk4kViiZcwgJuJQBQECJxe6HSqAYxeIRQI6UBgYSpECHEIQURDpCESIBE8uFSJRTuOjF1OeoNgEAMRJADi20XQZQuiLdzwHdFC2TWejAgNQvAAFgEBGQQtu4KjHSMECqzeY4RJEdhIQZgsPWhoSMOGa3Lt48+rdiykQACH5BAAFAB4ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQLRTMKk4JCFyGEdDs6R5kCBxgiFoIUeDs9Jpk0XBkpKg4AFBqsRIIkBEAFjwwaGVgYMgA2PFgoAEIozhSPExsaKjASggQPghPOKNCPHCMaIjOGQi8oOJIkKzEChx00kAoUHb+M94pCFjkSEiXfEBUAMoAApkRDGlTw4MFEAkUkugFRFIOBRYss9ElU5IKNAwcfTnRQVABHLxCMFChAmWmRABcjD1EI+KgABxQvXBgigW4iJG7OJggCwRJHN5qMCDh7IY/ngJHNnkECgpMENmc+F9xQB6mAi4MAbjgLMihfS6MorLY0JOCB2rVwB+PKnUtXbiAAOwAAAAAAAAAAAA==) #000 50% no-repeat}.ui-lightbox-caption{padding:.2em .4em;display:none}.ui-lightbox-caption-text{margin:.3em 0 .1em 0;float:left}.ui-lightbox-close{float:right;margin:0;padding:.125em}.ui-lightbox-close.ui-state-hover{padding:0}.ui-lightbox-nav-left,.ui-lightbox-nav-right{opacity:.5}.ui-lightbox-nav-left:hover,.ui-lightbox-nav-right:hover{opacity:1}.ui-listbox{padding:.25em;width:10em}.ui-listbox .ui-listbox-list-wrapper{overflow:auto}.ui-listbox .ui-listbox-list{list-style-type:none;margin:0;padding:0}.ui-listbox .ui-listbox-item{padding:.25em;border:0 none;cursor:pointer;font-weight:400;margin-bottom:1px}.ui-listbox .ui-listbox-item>span{vertical-align:middle}.ui-listbox .ui-listbox-item:last-child{margin-bottom:0}.ui-listbox.ui-state-disabled .ui-listbox-item{cursor:default}.ui-listbox-header{margin-bottom:.3em;padding:.125em .2em;position:relative}.ui-listbox-header .ui-chkbox{display:inline-block;vertical-align:middle;cursor:pointer}.ui-listbox-header .ui-listbox-filter-container{display:inline-block;vertical-align:middle;position:relative;width:100%}.ui-listbox-header.ui-listbox-header-w-checkbox .ui-listbox-filter-container{width:calc(100% - 2em)}.ui-listbox-header .ui-listbox-filter-container .fa{position:absolute;top:.25em;left:.25em}.ui-listbox-header .ui-inputtext{padding:.125em .125em .125em 1.25em;width:100%}.ui-listbox-footer{padding:.125em .2em}.ui-menu{width:12.5em;padding:.25em;position:relative}.ui-menu-separator{border-width:1px 0 0 0}.ui-menu.ui-menu-dynamic{position:absolute;display:none;z-index:100000}.ui-menu-list{position:static}.ui-menu .ui-menu-list .ui-menuitem{border:0}.ui-menu .ui-menu-list .ui-widget-header{clear:both;float:left;width:100%;margin:.125em 0;padding:.25em .5em}.ui-menu .ui-menuitem,.ui-menu .ui-menuitem-parent{width:100%;clear:both;margin:.125em 0;padding:0}.ui-menu .ui-menuitem-link{display:block;width:100%;text-decoration:none;font-weight:400;border:1px solid transparent;line-height:1em;padding:.25em;cursor:pointer}.ui-menu .ui-menuitem-link .ui-menuitem-icon{display:inline-block;vertical-align:middle}.ui-menu .ui-menuitem-text{vertical-align:middle}.ui-menu .ui-widget-header h1,.ui-menu .ui-widget-header h2,.ui-menu .ui-widget-header h3,.ui-menu .ui-widget-header h4,.ui-menu .ui-widget-header h5,.ui-menu .ui-widget-header h6{font-size:1em;margin:0 auto}.ui-menu .ui-menu-parent .ui-menu-child{display:none;width:12.5em;padding:.25em;position:absolute;margin:0;text-decoration:none;list-style:none}.ui-menu .ui-menu-parent{position:relative}.ui-menu .ui-menu-parent .ui-submenu-icon{float:right;margin-right:-.25em}.ui-menubutton{padding:0}.ui-menubutton .ui-button{margin:0}.ui-menu.ui-menubar .ui-menubar-root-list>li>a>.ui-submenu-icon{float:none}.ui-menubar{width:auto}.ui-menubar .ui-menubar-root-list{list-style:none;padding:0;margin:0}.ui-menubar .ui-menubar-root-list>.ui-menuitem{display:inline-block;width:auto}.ui-menubar:not(.ui-megamenu-vertical) .ui-menubar-root-list>.ui-menu-separator{display:inline-block;border-width:0 0 0 1px;width:1px;text-indent:-9999999px}.ui-menubar:not(.ui-megamenu-vertical) .ui-menubar-root-list>.ui-menu-separator:before{content:"ui-menu-separator"}.ui-menubar .ui-menu-child .ui-menuitem{width:100%}.ui-menubar .ui-menuitem.ui-menuitem-custom{float:right;margin-top:.25em}.ui-menubar .ui-menubar-options{float:right}.ui-slidemenu .ui-slidemenu-wrapper{position:relative}.ui-slidemenu .ui-slidemenu-content{overflow-x:hidden;overflow-y:auto;position:relative}.ui-slidemenu .ui-menu-list{position:absolute;top:0}.ui-slidemenu .ui-menu-parent{position:static}.ui-slidemenu .ui-menu-child{box-shadow:none;border:0 none;background:none repeat scroll 0 0 transparent}.ui-slidemenu-backward{position:absolute;bottom:0;width:100%;padding:.2em;cursor:pointer;display:none}.ui-slidemenu-backward .fa,.ui-slidemenu-backward span{vertical-align:middle}.ui-slidemenu .ui-slidemenuitem-active>.ui-submenu>ul{display:block!important}.ui-megamenu .ui-g{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ui-megamenu .ui-megamenu-panel.ui-menu-child{width:auto}.ui-megamenu-vertical,.ui-megamenu .ui-megamenu-panel .ui-menu-list{width:12.5em}.ui-megamenu-vertical .ui-menu-list .ui-menuitem,.ui-megamenu-vertical .ui-menuitem-link{width:100%;box-sizing:border-box}.ui-megamenu-vertical>.ui-menubar-root-list>.ui-menuitem>.ui-menuitem-link>.ui-submenu-icon{float:right}.ui-panelmenu{width:auto}.ui-panelmenu .ui-panelmenu-panel{padding:0;margin:0}.ui-panelmenu .ui-panelmenu-header{cursor:pointer;position:relative;margin:-1px 0 0 0;zoom:1}.ui-panelmenu .ui-panelmenu-header a{display:block;padding:.25em .5em;text-decoration:none}.ui-panelmenu .fa{width:1em;text-align:center;vertical-align:middle;margin-right:.25em}.ui-panelmenu .ui-menuitem-text{margin-left:.125em}.ui-panelmenu span{vertical-align:middle}.ui-panelmenu .ui-panelmenu-content{padding:.2em 0;border-top:0;overflow:auto;zoom:1;outline:0;margin-bottom:1px}.ui-panelmenu .ui-panelmenu-content .ui-menu-parent{overflow:hidden}.ui-panelmenu .ui-panelmenu-content-wrapper{box-sizing:border-box}.ui-panelmenu .ui-panelmenu-content-wrapper-overflown{overflow:hidden}.ui-panelmenu .ui-panelmenu-header.ui-state-disabled,.ui-panelmenu .ui-panelmenu-header.ui-state-disabled a{cursor:default}.ui-panelmenu .ui-menu-list{position:static}.ui-panelmenu .ui-menuitem{margin:1px 0;padding:0}.ui-panelmenu .ui-menu-separator{width:95%;margin:0 auto}.ui-panelmenu .ui-menuitem-link{display:block;text-decoration:none;font-weight:400;border:1px solid transparent;line-height:1em;cursor:pointer;position:relative;padding:.25em .5em}.ui-panelmenu .ui-menu-parent .ui-menu-list{margin-left:1.5em}.ui-menuitem-active>.ui-megamenu-panel,.ui-menuitem-active>.ui-submenu>ul{display:block!important}.ui-menuitem-outline{outline:1px dotted;z-index:1}.ui-fluid .ui-menu:not(.ui-menu-dynamic){width:100%}.ui-message{border:1px solid;margin:0 .25em;padding:.25em .5em;display:inline-block}.ui-fluid .ui-message{display:block}.ui-messages{border:1px solid;margin:.5em 0;padding:1em 1em 1em .5em;display:none;position:relative}.ui-messages-icon{display:inline-block;padding:0;vertical-align:middle}.ui-messages-summary{font-weight:700;margin-left:.25em}.ui-messages-detail{margin-left:.25em}.ui-messages-success{color:#2c832f;background-color:#b4f0b6;border-color:#b4f0b6}.ui-messages-success .ui-messages-close{color:#2c832f}.ui-messages-info{color:#1765a3;background-color:#bfe0fa;border-color:#bfe0fa}.ui-messages-info .ui-messages-close{color:#1765a3}.ui-messages-warn{color:#8a6714;background-color:#ffe9b5;border-color:#ffe9b5}.ui-messages-warn .ui-messages-close{color:#8a6714}.ui-messages-error{color:#ab1a0f;background-color:#ffcbc8;border-color:#ffcbc8}.ui-messages-error .ui-messages-close{color:#ab1a0f}.ui-messages ul{margin:0;padding:0;list-style-type:none;display:inline-block;vertical-align:middle}.ui-messages.ui-messages-noicon ul{margin:0 1.5em 0 0}.ui-messages .ui-messages-close{cursor:pointer;position:absolute;top:5px;right:5px}.ui-multiselect{display:inline-block;position:relative;width:auto;cursor:pointer}.ui-multiselect .ui-multiselect-trigger{border-right:0;border-top:0;border-bottom:0;cursor:pointer;width:1.5em;height:100%;position:absolute;right:0;top:0;padding:0 .25em}.ui-multiselect .ui-multiselect-trigger .fa{margin-top:.4em;margin-left:-.125em}.ui-multiselect .ui-multiselect-label-container{overflow:hidden}.ui-multiselect .ui-multiselect-label{display:block;padding:.25em 2em .25em .25em;width:auto;border:0;cursor:pointer;text-overflow:ellipsis;overflow:hidden}.ui-multiselect.ui-state-disabled .ui-multiselect-label,.ui-multiselect.ui-state-disabled .ui-multiselect-trigger{cursor:auto}.ui-multiselect-panel{padding:.2em;position:absolute;min-width:12em}.ui-multiselect .ui-multiselect-panel{min-width:100%;display:none}.ui-multiselect-panel .ui-multiselect-items-wrapper{overflow:auto;position:relative;padding:.2em 0}.ui-multiselect-panel .ui-multiselect-list{border:0 none}.ui-multiselect-panel .ui-multiselect-item{border:0 none;cursor:pointer;font-weight:400;margin:1px 0;padding:.125em .25em;text-align:left;white-space:nowrap;display:block;position:relative}.ui-multiselect-panel .ui-multiselect-item .ui-chkbox,.ui-multiselect-panel .ui-multiselect-item label{display:inline-block;vertical-align:middle}.ui-multiselect-header{margin-bottom:.3em;padding:.25em;position:relative;text-align:left}.ui-multiselect-header .ui-chkbox{display:inline-block;vertical-align:middle;cursor:pointer}.ui-multiselect-header .ui-multiselect-filter-container{position:relative;display:inline-block;vertical-align:middle;width:65%}.ui-multiselect-header.ui-multiselect-header-no-toggleall .ui-multiselect-filter-container{width:85%}.ui-multiselect-header .ui-multiselect-filter-container .fa{position:absolute;top:.25em;left:.125em}.ui-multiselect-header .ui-inputtext{padding:.125em .125em .125em 1.25em;width:100%}.ui-multiselect-header .ui-multiselect-close{position:absolute;right:.375em;top:.375em;display:block;font-size:1em;border:0 none}.ui-multiselect-header a.ui-multiselect-all,.ui-multiselect-header a.ui-multiselect-none{float:left;margin-right:10px;display:block}.ui-multiselect-header .ui-multiselect-close.ui-state-hover{padding:0}.ui-fluid .ui-multiselect{width:100%;box-sizing:border-box}.ui-orderlist{display:table}.ui-orderlist .ui-orderlist-controls{height:12.5em;padding:0 .25em;vertical-align:middle;display:table-cell}.ui-orderlist .ui-orderlist-controls .ui-button{display:block;margin-bottom:.25em}.ui-orderlist .ui-orderlist-container{display:table-cell;vertical-align:top}.ui-orderlist .ui-orderlist-list{list-style-type:none;margin:0;padding:0;overflow:auto;height:12.5em;width:12.5em}.ui-orderlist .ui-orderlist-caption{text-align:center;padding:.5em .75em;border-bottom:0 none}.ui-orderlist .ui-orderlist-list .ui-orderlist-item{margin:1px;padding:.125em;cursor:pointer;border:0 none;font-weight:inherit}.ui-orderlist .ui-orderlist-filter-container{position:relative;width:100%;padding:.5em .6em;border-bottom:0 none}.ui-orderlist .ui-orderlist-filter-container .ui-inputtext{text-indent:1.1em;width:100%}.ui-orderlist .ui-orderlist-filter-container .fa{position:absolute;top:50%;left:1em;margin-top:-.6em}.ui-orderlist.ui-state-disabled .ui-button,.ui-orderlist.ui-state-disabled .ui-orderlist-item{cursor:default}.ui-orderlist.ui-state-disabled .ui-orderlist-list{overflow:hidden}.ui-orderlist.ui-orderlist-responsive{width:100%}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls{width:16.66666%;padding-right:.5em}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-list-container{width:83.33333%}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-caption,.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls>.ui-button,.ui-orderlist.ui-orderlist-responsive .ui-orderlist-list{width:100%}.ui-orderlist .ui-orderlist-droppoint{height:6px;list-style-type:none}@media(max-width:40em){.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls{text-align:center;width:100%;display:inline-block;height:auto}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls .ui-button{display:inline;width:20%;display:inline-block}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-list-container{width:100%}}.ui-organizationchart .ui-organizationchart-table{border-spacing:0;border-collapse:separate}.ui-organizationchart .ui-organizationchart-table>tr>td{text-align:center;vertical-align:top;padding:0;padding:0 .75em}.ui-organizationchart .ui-organizationchart-node-content{padding:.5em .75em;display:inline-block;position:relative}.ui-organizationchart .ui-organizationchart-node-content .ui-node-toggler{position:absolute;bottom:-9px;margin-left:-8px;z-index:2;left:50%}.ui-organizationchart .ui-organizationchart-line-down{margin:0 auto;height:20px;width:1px;float:none}.ui-organizationchart .ui-organizationchart-line-left,.ui-organizationchart .ui-organizationchart-line-right{float:none;border-radius:0}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node{cursor:pointer}.ui-overlaypanel{padding:0;margin:0;position:absolute}.ui-overlaypanel-content{padding:.5em 1em}.ui-overlaypanel-close{position:absolute;top:-.5em;right:-.5em;border-radius:100%}.ui-paginator{margin:0;text-align:center;padding:.125em}.ui-paginator .ui-paginator-top{border-bottom:0 none}.ui-paginator .ui-paginator-bottom{border-top:0 none}.ui-paginator .ui-paginator-current,.ui-paginator .ui-paginator-first,.ui-paginator .ui-paginator-last,.ui-paginator .ui-paginator-next,.ui-paginator .ui-paginator-page,.ui-paginator .ui-paginator-pages,.ui-paginator .ui-paginator-prev{display:inline-block;padding:.125em .375em;zoom:1;margin-left:.063em;margin-right:.063em;text-decoration:none;vertical-align:middle}.ui-paginator .ui-paginator-first,.ui-paginator .ui-paginator-last,.ui-paginator .ui-paginator-next,.ui-paginator .ui-paginator-page,.ui-paginator .ui-paginator-prev{cursor:pointer}.ui-paginator .ui-paginator-current,.ui-paginator .ui-paginator-rpp-options{margin-left:1em;margin-right:1em;background-image:none}.ui-paginator .ui-paginator-jtp-select option,.ui-paginator .ui-paginator-rpp-options option{background-image:none;border:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.ui-paginator a.ui-state-disabled{outline:0 none}.ui-paginator .ui-dropdown{min-width:4em;margin-left:.375em}.ui-panel{padding:.2em}.ui-panel .ui-panel-titlebar{padding:.5em .75em}.ui-panel .ui-panel-titlebar-icon{float:right;cursor:pointer;margin-left:.2em;margin-top:-.1em}.ui-panel .ui-panel-content{border:0;background:0;padding:.5em .75em}.ui-panel .ui-panel-footer{border-width:1px 0 0;padding:.25em .5em;text-align:left}.ui-panel-content-wrapper-overflown{overflow:hidden}.ui-password-panel{padding:.25em .5em;width:10em;margin-top:2px}.ui-password-panel .ui-password-meter{height:10px;background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAoCAYAAAAcwQPnAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABb9JREFUeNrsnMtOI0cUhk9ffJVjZxIUg2aA2bBlZsmsshgpmuUom7xGHiO7kFfgCRLlBUZZIYFQyCKLMFJAIQwOGF/Gt3ZfnPNXU3YZsBQam5StOlKP2/1101Xn/FWu/q2xdXBw8GUURd8S0VsyYeLh8aNt29tuGIbb5XL5ZbFYNCkx8eBoNptvK5XKc9eyrJeZTIa63e4Quq5LjuOIfd/3iWe0BzNWMaVSKbHPYqYgCIaM2yAYXnENrtWRIcDQl8FgIBheZ5m3easFtARNuTjY7/fFDWTicBE29fhDGDqYTqdFQ9CJmw1CY3Ac13qepyVDgMlCgKmimkXe5rEWuJ8QNv7BbIUk4YZyJOJCVclJGUYONjBs8sZy5GSzWXE+Ot/r9bRkCDApKjB1BphF3ua1FvJvWvv7+wOpcjQK0el0xm6az+cTMRwHl7MiuDpyCoWCUDsa1Gq1hjOATgzHwHAOjoGpM0DS3Dw2e6xaQLhCcOqNjaiMqKaRtzFhGVEZUU1LVCJ/e3t7f/IJz82DsolpBYvs2GZRbfN+3aTDxJSiDk3xot7GHNY1+TAxpXjHmvoVzvt35XI5N6/Oe7PZpHq9Tmtra6akmjnvOZhbpZ0dudojWl6GQYHVHtH5OZH0bJIyHAPDOTgGpiwwaWmJeDUY719eEq8G/zPzXr8Wi9K7zD7jvGvgvNPxMaxlovV1oosLIphgJycjcSRlEBVYrYZexEx1tFdWiNrteDs7I2o07sXkE1BLEZxx3jVy3qlSIdrYiGcFPJIeHcVCQORyyRhGDBgEUa3GTPlOUggODcS9Ieyrq3sz6QLLjhrnXQ/n3ZXrFDHb8FpFiGB3l0g2CGuvra37MziwYBAbRgUY7iNjc3M0cx0eEp2eJmKNN2/E7hULT/orspN3eS/3ZdLPgpAm+VlgSPZd/pIuTPpZODbJz5pG3m4574TP3EnCuS+ToiqVJotqdXWycBIwY5Lq6rzPsagQRlT6Oe8+n+DOudMrOmlCL+f9Z+zPc0eMqPR03t/xm3OTDxPGeV9Mx3ohvkG47bx3f4lJ0OJV3qXyOcOLwuwyv/I6P+JFYQ+TW6Qfw3MImM3nDKKYDRR3P73EDxbXDr7H/QtbWjGv8I1YXMN7WiznPaxwC+pckA+jBNgZfuRY5xMumPf4keNkVEidGEQF5tdYTGHMIsU1z67wNe14657x4Glox/rpeBCo/6llMZx37/frYskW5PgZfiOevUJ+RG0dxUXTjVlOzFAgvxqzUHH3ITiIzOOB0znmv3GlJetlx79BWBzn/fT7UQJcXm892YpnMJ8LVtvlQgb6MbgkYBBb5McsUDyz4uZo5moccvVO9WTZZ9RwGsNvEBbLeb8pKjs1ucg6MCmqVGmyqHKrk4usC2NRUenFAjvvRlT/u6ikCIzzbsJ8g7DIzvuixIJ8gzB03n/gNz+ZspqYtvNufm3GxEycd/FrM39Ud0aLwfQSpa+d4Y53SX3FNU7K0k6B8pmleBEZtKijuPuOlaZCdpk/CmwKoz61euf82Rxpxyx+1gFzbHhFkWCh4u7PIm/zVotPM6/GnfcGDDuOQnaF/LAtto/dM/IU1zgpy7glSuVy1PYq1PPr3KCRu+/YGSrl17lzFxSEPW7HyaixGjGICqzn1ygahIKFirs/i7zNYy3yzg3nvc7CAkSycFO87yrOcFKWS38mNrBOvyoaNHQ3nBx9Xtjg8y85CR2qto54Jgi1Y5blCIYCdf2qYIHi7s8ib/Nai0KqN+6819rvRYPQjErjkD4qfssXxc1E7JPsMyqXXohR0ez+Rf80fxtNx26Rnj7ZIo9Hjec36O/aLs8EgXbMtlzBAk5aGPmC9RXPLGluHps9Vi2+evr1uEFavDbx7mpsEiY7IoQ7oSOOnZrYWB2YFFUmVZooqmnnbRbssWtxy3k3ojKimoaopPNufm3GxEycd/NrMyam7rz/K8AAIzeBeEI84y8AAAAASUVORK5CYII=) no-repeat 0 0;padding:0;margin:0}.ui-password-info{margin-top:.25em}.ui-password-panel-overlay{position:absolute}.ui-picklist>div{float:left}.ui-picklist .ui-picklist-buttons{height:12.5em;padding:0 .25em}.ui-picklist .ui-picklist-list{list-style-type:none;margin:0;padding:0;overflow:auto;height:12.5em;width:12.5em}.ui-picklist .ui-picklist-list li{margin:1px;padding:.125em}.ui-picklist .ui-button{display:block;margin-bottom:.25em}.ui-picklist .ui-button-text-icon-left{width:100%}.ui-picklist .ui-picklist-item{cursor:pointer;border:0 none;font-weight:inherit}.ui-picklist .ui-picklist-caption{text-align:center;padding:.5em .75em;border-bottom:0 none}.ui-picklist table{width:100%;border-collapse:collapse}.ui-picklist .ui-picklist-filter-container{position:relative;width:100%;padding:.5em .6em;border-bottom:0 none}.ui-picklist .ui-picklist-filter-container .ui-picklist-filter{text-indent:1.1em;width:100%}.ui-picklist .ui-picklist-filter-container .fa{position:absolute;top:50%;left:1em;margin-top:-.6em}.ui-picklist{display:table}.ui-picklist>div{float:none;display:table-cell;vertical-align:top}.ui-picklist .ui-picklist-buttons{vertical-align:middle}.ui-picklist.ui-picklist-vertical{display:table}.ui-picklist.ui-picklist-vertical>div{float:none;display:table-row;vertical-align:top}.ui-picklist.ui-picklist-vertical .ui-picklist-buttons{text-align:center;height:auto}.ui-picklist.ui-picklist-vertical .ui-picklist-buttons .ui-button{display:inline-block}.ui-picklist.ui-picklist-vertical .ui-button{margin-top:.25em}.ui-picklist-outline{outline:1px dotted #000;z-index:1}.ui-picklist .ui-picklist-droppoint{height:6px;list-style-type:none}.ui-picklist .ui-picklist-list .ui-picklist-droppoint-empty{height:100%;list-style-type:none}.ui-picklist-list.ui-picklist-source,.ui-picklist-list.ui-picklist-target{outline:0}.ui-picklist.ui-picklist-responsive *{box-sizing:border-box}.ui-picklist.ui-picklist-responsive{width:100%}.ui-picklist.ui-picklist-responsive .ui-picklist-listwrapper{width:35%}.ui-picklist.ui-picklist-responsive .ui-picklist-listwrapper.ui-picklist-listwrapper-nocontrols{width:45%}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons{width:10%}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons button{width:100%}.ui-picklist.ui-picklist-responsive .ui-picklist-list{width:auto}@media(max-width:40em){.ui-picklist.ui-picklist-responsive{display:block}.ui-picklist.ui-picklist-responsive>div{display:block;width:100%!important}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons{text-align:center;height:auto;padding:.4em 0}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons button{display:inline;width:20%;margin-bottom:0}.ui-picklist.ui-picklist-responsive .ui-picklist-source-controls.ui-picklist-buttons{padding-bottom:.4em}.ui-picklist.ui-picklist-responsive .ui-picklist-target-controls.ui-picklist-buttons{padding-top:.4em}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-right:before{content:"\F107"}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-double-right:before{content:"\F103"}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-left:before{content:"\F106"}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-double-left:before{content:"\F102"}}.ui-progressbar{height:1.2em;text-align:left;position:relative;overflow:hidden}.ui-progressbar-determinate .ui-progressbar-value{height:100%;width:0;position:absolute;display:none;border:0 none}.ui-progressbar-determinate .ui-progressbar-value-animate{transition:width 1s ease-in-out}.ui-progressbar-determinate .ui-progressbar-label{text-align:center;height:100%;width:100%;position:absolute;display:none;font-weight:700}.ui-progressbar-indeterminate .ui-progressbar-value{border:0 none}.ui-progressbar-indeterminate .ui-progressbar-value:before{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:ui-progressbar-indeterminate-anim 2.1s cubic-bezier(.65,.815,.735,.395) infinite;animation:ui-progressbar-indeterminate-anim 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.ui-progressbar-indeterminate .ui-progressbar-value:after{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:ui-progressbar-indeterminate-anim-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation:ui-progressbar-indeterminate-anim-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes ui-progressbar-indeterminate-anim{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@keyframes ui-progressbar-indeterminate-anim{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@-webkit-keyframes ui-progressbar-indeterminate-anim-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@keyframes ui-progressbar-indeterminate-anim-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}.ui-progress-spinner{position:relative;margin:0 auto;width:100px;height:100px;display:inline-block}.ui-progress-spinner:before{content:"";display:block;padding-top:100%}.ui-progress-spinner-svg{-webkit-animation:ui-progress-spinner-rotate 2s linear infinite;animation:ui-progress-spinner-rotate 2s linear infinite;height:100%;-webkit-transform-origin:center center;transform-origin:center center;width:100%;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto}.ui-progress-spinner-circle{stroke-dasharray:1,200;stroke-dashoffset:0;-webkit-animation:ui-progress-spinner-dash 1.5s ease-in-out infinite,ui-progress-spinner-color 6s ease-in-out infinite;animation:ui-progress-spinner-dash 1.5s ease-in-out infinite,ui-progress-spinner-color 6s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes ui-progress-spinner-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes ui-progress-spinner-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes ui-progress-spinner-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes ui-progress-spinner-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes ui-progress-spinner-color{0%,to{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}@keyframes ui-progress-spinner-color{0%,to{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}.ui-radiobutton{display:inline-block;cursor:pointer;vertical-align:middle;margin-right:.25em}.ui-radiobutton-box{width:1.125em;height:1.125em;line-height:1.125em;border-radius:100%;text-align:center}.ui-radiobutton-icon{display:block;font-size:.5em;line-height:inherit;margin-top:-1px}.ui-radiobutton,.ui-radiobutton-label{vertical-align:middle}.ui-fluid .fc .ui-button{width:auto}.ui-selectbutton{display:inline-block}.ui-selectbutton.ui-state-error{padding:0}.ui-selectbutton .ui-button.ui-state-focus{outline:0}.ui-sidebar{position:fixed;padding:.5em 1em;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ui-sidebar-left{top:0;left:0;width:20em;height:100%;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.ui-sidebar-right{top:0;right:0;width:20em;height:100%;-webkit-transform:translateX(100%);transform:translateX(100%)}.ui-sidebar-top{top:0;left:0;width:100%;height:10em;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.ui-sidebar-bottom{bottom:0;left:0;width:100%;height:10em;-webkit-transform:translateY(100%);transform:translateY(100%)}.ui-sidebar-full{width:100%;height:100%;left:0;transition:-webkit-transform 0s;transition:transform 0s;transition:transform 0s,-webkit-transform 0s}.ui-sidebar-left.ui-sidebar-active,.ui-sidebar-right.ui-sidebar-active{-webkit-transform:translateX(0);transform:translateX(0)}.ui-sidebar-left.ui-sidebar-sm,.ui-sidebar-right.ui-sidebar-sm{width:20em}.ui-sidebar-left.ui-sidebar-md,.ui-sidebar-right.ui-sidebar-md{width:40em}.ui-sidebar-left.ui-sidebar-lg,.ui-sidebar-right.ui-sidebar-lg{width:60em}.ui-sidebar-bottom.ui-sidebar-active,.ui-sidebar-top.ui-sidebar-active{-webkit-transform:translateY(0);transform:translateY(0)}.ui-sidebar-bottom.ui-sidebar-sm,.ui-sidebar-top.ui-sidebar-sm{height:10em}.ui-sidebar-bottom.ui-sidebar-md,.ui-sidebar-top.ui-sidebar-md{height:20em}.ui-sidebar-bottom.ui-sidebar-lg,.ui-sidebar-top.ui-sidebar-lg{height:30em}.ui-sidebar-mask{position:fixed;width:100%;height:100%}.ui-sidebar-close{float:right}@media screen and (max-width:64em){.ui-sidebar-left.ui-sidebar-lg,.ui-sidebar-left.ui-sidebar-md,.ui-sidebar-right.ui-sidebar-lg,.ui-sidebar-right.ui-sidebar-md{width:20em}}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none;z-index:1}.ui-slider .ui-slider-handle.ui-slider-handle-active{z-index:2}.ui-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.25em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-slider-animate .ui-slider-handle{transition:left .3s}.ui-spinner{display:inline-block;overflow:visible;padding:0;position:relative;vertical-align:middle}.ui-spinner-input{vertical-align:middle;padding-right:1.5em}.ui-spinner-button{cursor:default;display:block;height:50%;margin:0;overflow:hidden;padding:0;position:absolute;right:0;text-align:center;vertical-align:middle;width:1.5em}.ui-spinner .fa{position:absolute;top:50%;left:50%;margin-top:-.5em;margin-left:-.5em;width:1em}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-fluid .ui-spinner{width:100%}.ui-fluid .ui-spinner .ui-spinner-input{padding-right:2em;width:100%}.ui-fluid .ui-spinner .ui-spinner-button{width:1.5em}.ui-fluid .ui-spinner .ui-spinner-button .fa{left:.7em}.ui-splitbutton{position:relative;display:inline-block;zoom:1}.ui-splitbutton .ui-button.ui-splitbutton-menubutton{width:2em}.ui-splitbutton.ui-state-disabled button{cursor:default}.ui-fluid .ui-splitbutton{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-fluid .ui-splitbutton .ui-button:first-child{width:calc(100% - 2em)}.ui-fluid .ui-splitbutton .ui-button.ui-splitbutton-menubutton{width:2em;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-steps ul{list-style-type:none;padding:0;margin:0}.ui-steps .ui-steps-item{float:left;box-sizing:border-box;cursor:pointer}.ui-steps.ui-steps-readonly .ui-steps-item{cursor:auto}.ui-steps .ui-steps-item .ui-menuitem-link{text-decoration:none;display:block;padding:1em;position:relative;text-align:center}.ui-steps .ui-steps-item.ui-state-disabled .ui-menuitem-link,.ui-steps .ui-steps-item.ui-state-highlight .ui-menuitem-link{cursor:default}.ui-steps .ui-steps-number{font-size:200%;display:block}.ui-steps .ui-steps-title{display:block;white-space:nowrap}@media(max-width:40em){.ui-steps .ui-steps-item .ui-menuitem-link{padding:.5em}.ui-steps .ui-steps-item .ui-steps-title{display:none}}.ui-tabmenu .ui-tabmenu-nav{margin:0;padding:.25em .5em 0 .25em}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem{list-style:none;float:left;position:relative;margin:0 .2em 1px 0;padding:0;white-space:nowrap;display:block;border-bottom:0;top:1px}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabmenu .ui-tabmenu-nav a{padding:.5em 1em}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem .ui-icon{float:left}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem.ui-state-disabled a{cursor:default}.ui-tabview{padding:.25em}.ui-tabview .ui-tabview-nav{margin:0}.ui-tabview .ui-tabview-nav li{list-style:none;float:left;position:relative;margin:0 .125em 1px 0;padding:0;white-space:nowrap}.ui-tabview .ui-tabview-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabview .ui-tabview-nav li.ui-state-disabled a,.ui-tabview .ui-tabview-nav li.ui-state-processing a,.ui-tabview .ui-tabview-nav li.ui-tabview-selected a{cursor:text}.ui-tabview.ui-tabview-collapsible .ui-tabview-nav li.ui-tabview-selected a,.ui-tabview .ui-tabview-nav li a{cursor:pointer}.ui-tabview .ui-tabview-panel{border-width:0;padding:1em;background:0}.ui-tabview .ui-tabview-nav li{display:block}.ui-tabview .ui-tabview-nav li .ui-tabview-left-icon,.ui-tabview .ui-tabview-nav li .ui-tabview-right-icon,.ui-tabview .ui-tabview-nav li .ui-tabview-title{vertical-align:middle}.ui-tabview .ui-tabview-nav li .ui-tabview-close{margin:.5em .3em 0 0;cursor:pointer}.ui-tabview.ui-tabview-top>.ui-tabview-nav li{border-bottom:0;top:1px}.ui-tabview.ui-tabview-top>.ui-tabview-nav{padding:.2em .2em 0}.ui-tabview.ui-tabview-bottom>.ui-tabview-nav{padding:0 .2em .2em}.ui-tabview.ui-tabview-bottom>.ui-tabview-nav li{border-top:0}.ui-tabview-left:after,.ui-tabview-right:after{clear:both;content:".";display:block;height:0;visibility:hidden}.ui-tabview-left>.ui-tabview-nav{float:left;width:25%;height:300px;background-image:none;padding-top:1px}.ui-tabview-left>.ui-tabview-panels{float:right;width:75%}.ui-tabview.ui-tabview-left>.ui-tabview-nav li,.ui-tabview.ui-tabview-right>.ui-tabview-nav li{display:block;float:right;white-space:normal;width:99%}.ui-tabview.ui-tabview-left>.ui-tabview-nav li{margin:0 0 1px 0;border-right:0 none}.ui-tabview.ui-tabview-right>.ui-tabview-nav{float:right;width:25%;height:300px;background-image:none;padding-top:1px}.ui-tabview.ui-tabview-right>.ui-tabview-panels{float:left;width:75%}.ui-tabview.ui-tabview-right>.ui-tabview-nav li{margin:0 0 1px 0;border-left:0 none}.ui-rtl .ui-tabview .ui-tabview-nav li{float:right}.ui-terminal{height:18em;overflow:auto;padding:.25em}.ui-terminal-input{border:0 none;background-color:transparent;color:inherit;padding:0;margin:0 0 0 .125em;width:75%;outline:0;vertical-align:baseline}.ui-terminal-command{margin-left:.125em;-moz-margin-start:.125em}.ui-terminal-input::-ms-clear{display:none}.ui-toolbar{padding:.25em .5em}.ui-toolbar-group-left{float:left}.ui-toolbar-group-right{float:right}.ui-tooltip{position:absolute;display:none;padding:.25em .5em;max-width:12.5em}.ui-tooltip.ui-tooltip-left,.ui-tooltip.ui-tooltip-right{padding:0 .25em}.ui-tooltip.ui-tooltip-bottom,.ui-tooltip.ui-tooltip-top{padding:.25em 0}.ui-tooltip .ui-tooltip-text{padding:.125em .5em;background-color:#4c4c4c;color:#fff;white-space:pre-line}.ui-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.ui-tooltip-right .ui-tooltip-arrow{top:50%;left:0;margin-top:-.25em;border-width:.25em .25em .25em 0;border-right-color:#4c4c4c}.ui-tooltip-left .ui-tooltip-arrow{top:50%;right:0;margin-top:-.25em;border-width:.25em 0 .25em .25em;border-left-color:#4c4c4c}.ui-tooltip.ui-tooltip-top{padding:.25em 0}.ui-tooltip-top .ui-tooltip-arrow{bottom:0;left:50%;margin-left:-.25em;border-width:.25em .25em 0;border-top-color:#4c4c4c}.ui-tooltip-bottom .ui-tooltip-arrow{top:0;left:50%;margin-left:-.25em;border-width:0 .25em .25em;border-bottom-color:#4c4c4c}.ui-tree{width:18em}.ui-tree .ui-treenode-selectable.ui-treenode-content{cursor:pointer}.ui-tree .ui-tree-container{height:100%;margin:0;overflow:auto;padding:.25em;white-space:nowrap}.ui-tree .ui-treenode-children{margin:0;padding:0 0 0 1em}.ui-tree .ui-treenode{background-attachment:scroll;background-color:transparent;background-image:none;background-position:0 0;background-repeat:repeat-y;list-style:none outside none;margin:0;padding:.125em 0 0 0}.ui-tree .ui-treenode-droppoint{height:4px;list-style-type:none}.ui-tree .ui-treenode-droppoint-active{border:0 none}.ui-tree .ui-tree-toggler{cursor:pointer}.ui-tree .ui-tree-toggler,.ui-tree .ui-treenode-icon,.ui-tree .ui-treenode-label{display:inline-block;vertical-align:middle}.ui-tree .ui-treenode-label{padding:0 .25em}.ui-tree .ui-treenode-label.ui-state-highlight,.ui-tree .ui-treenode-label.ui-state-hover{font-weight:400;border:0 none}.ui-tree .ui-treenode.ui-treenode-leaf>.ui-treenode-content>.ui-tree-toggler{visibility:hidden}.ui-tree .ui-chkbox-box{cursor:pointer}.ui-tree .ui-chkbox{display:inline-block;vertical-align:middle}.ui-tree .ui-chkbox .ui-chkbox-icon{margin-left:1px}.ui-fluid .ui-tree{width:100%}.ui-tree-horizontal{width:auto;padding:.5em 0;overflow:auto}.ui-tree.ui-tree-horizontal table,.ui-tree.ui-tree-horizontal td,.ui-tree.ui-tree-horizontal tr{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.ui-tree.ui-tree-horizontal .ui-tree-toggler{vertical-align:middle;margin:0}.ui-tree-horizontal .ui-treenode-content{font-weight:400;padding:.4em 1em .4em .2em}.ui-tree.ui-tree-horizontal .ui-tree-node-label{margin:0}.ui-tree-horizontal .ui-treenode-parent .ui-treenode-content{font-weight:400;white-space:nowrap}.ui-tree.ui-tree-horizontal .ui-treenode{background:url(line.567f57385ea3dde2c9ae.gif) repeat-x scroll 50% transparent;padding:.25em 2.5em}.ui-tree.ui-tree-horizontal .ui-treenode.ui-treenode-collapsed,.ui-tree.ui-tree-horizontal .ui-treenode.ui-treenode-leaf{padding-right:0}.ui-tree.ui-tree-horizontal .ui-treenode-children{padding:0;margin:0}.ui-tree.ui-tree-horizontal .ui-treenode-connector{width:1px}.ui-tree.ui-tree-horizontal .ui-treenode-connector-table{height:100%;width:1px}.ui-tree.ui-tree-horizontal .ui-treenode-connector-line{background:url(line.567f57385ea3dde2c9ae.gif) repeat-y scroll 0 0 transparent;width:1px}.ui-tree.ui-tree-horizontal table{height:0}.ui-tree.ui-tree-horizontal .ui-chkbox{vertical-align:bottom;margin-right:.25em}.ui-tree.ui-tree-loading{position:relative;min-height:4em}.ui-tree .ui-tree-loading-mask{position:absolute;width:100%;height:100%;-ms-filter:"alpha(opacity=10)";opacity:.1;z-index:1}.ui-tree .ui-tree-loading-content{position:absolute;left:50%;top:50%;z-index:2;margin-top:-1em;margin-left:-1em}.ui-treetable{position:relative}.ui-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}.ui-treetable .ui-treetable-footer,.ui-treetable .ui-treetable-header{text-align:center;padding:.5em .75em}.ui-treetable .ui-treetable-header{border-bottom:0 none}.ui-treetable .ui-treetable-footer{border-top:0 none}.ui-treetable tfoot td,.ui-treetable th{text-align:center}.ui-treetable tbody td,.ui-treetable tfoot td,.ui-treetable thead th{padding:.25em .5em;overflow:hidden;white-space:nowrap;border-width:1px;border-style:solid}.ui-treetable tbody td{border-color:inherit}.ui-treetable tbody td:first-child span{vertical-align:middle}.ui-treetable .ui-treetable-toggler{vertical-align:middle;cursor:pointer;text-decoration:none}.ui-treetable .ui-treetable-checkbox{margin-right:.5em}.ui-treetable .ui-treetable-checkbox .ui-chkbox-icon{margin-left:1px}.ui-treetable .ui-treetable-row.ui-treetable-row-selectable{cursor:pointer}.ui-treetable .ui-treetable-row.ui-state-highlight{border:0 none}.ui-treetable tr.ui-state-hover{border-color:inherit;font-weight:inherit}.ui-treetable .ui-treetable-indent{width:1em;height:1em;float:left}.ui-treetable .ui-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5em;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.ui-treetable .ui-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.ui-treetable-resizable{padding-bottom:1px;overflow:auto}.ui-treetable-resizable tbody td,.ui-treetable-resizable tfoot td,.ui-treetable-resizable thead th{white-space:nowrap}.ui-treetable-resizable th.ui-resizable-column{background-clip:padding-box;position:relative}.ui-treetable td.ui-treetable-child-table-container{padding:0;border:0 none}.ui-treetable .ui-treetable-row{display:table-row;border-bottom:0 transparent}.ui-treetable tbody .ui-treetable-row td{border:0 none}.ui-treetable tbody .ui-treetable-row td input{outline:0 none}
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
new file mode 100644
index 0000000..9334697
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/3rdpartylicenses.txt
@@ -0,0 +1,373 @@
+core-js@2.5.6
+MIT
+Copyright (c) 2014-2018 Denis Pushkarev
+
+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.
+
+primeng@4.3.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 PrimeTek
+
+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.
+
+@angular/forms@5.2.11
+MIT
+MIT
+
+@ngrx/store@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+@angular/core@5.2.11
+MIT
+MIT
+
+webpack@3.8.1
+MIT
+Copyright JS Foundation and other contributors
+
+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.
+
+@angular/platform-browser@5.2.11
+MIT
+MIT
+
+zone.js@0.8.26
+MIT
+The MIT License
+
+Copyright (c) 2016-2018 Google, Inc.
+
+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.
+
+@angular/router@5.2.11
+MIT
+MIT
+
+@angular/common@5.2.11
+MIT
+MIT
+
+file-saver@1.3.8
+MIT
+The MIT License
+
+Copyright © 2016 [Eli Grey][1].
+
+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.
+
+  [1]: http://eligrey.com
+
+@types/file-saver@1.3.0
+MIT
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+
+css-loader@0.28.11
+MIT
+Copyright JS Foundation and other contributors
+
+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.
+
+@angular/cdk@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+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.
+
+@angular/material@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+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.
+
+@ngrx/effects@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+@ngrx/db@2.1.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2015 ngrx
+
+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.
+
+@ngrx/store-devtools@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+codemirror@5.38.0
+MIT
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+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.
+
+@angular/animations@5.2.11
+MIT
+MIT
+
+hammerjs@2.0.8
+MIT
+The MIT License (MIT)
+
+Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
+
+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.
+
+@angular/platform-browser-dynamic@5.2.11
+MIT
+MIT
\ No newline at end of file
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt b/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/content/www.apache.org_licenses_LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl b/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
new file mode 100644
index 0000000..50049dd
--- /dev/null
+++ b/asterixdb/asterix-dashboard/src/main/resources/licenses/dashboard-license.ftl
@@ -0,0 +1,36 @@
+<#--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! 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.
+-->
+<@indent spaces=3>
+<#list licenses as license>
+  <#if license.url == "http://www.apache.org/licenses/LICENSE-2.0.txt">
+${license.content}
+    <#break>
+  </#if>
+</#list>
+</@indent>
+
+===
+   ASTERIXDB Dashboard JS COMPONENTS:
+
+    includes a number of packed subcomponents under
+    dashboard/static/ with separate copyright
+    notices and license terms. Your use of these subcomponents is subject
+    to the terms and condition of the following licenses.
+===
+<#include "3rdpartylicenses.txt">
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.angular-cli.json b/asterixdb/asterix-dashboard/src/node/.angular-cli.json
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/.angular-cli.json
rename to asterixdb/asterix-dashboard/src/node/.angular-cli.json
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.editorconfig b/asterixdb/asterix-dashboard/src/node/.editorconfig
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/.editorconfig
rename to asterixdb/asterix-dashboard/src/node/.editorconfig
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore b/asterixdb/asterix-dashboard/src/node/.gitignore
similarity index 98%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore
rename to asterixdb/asterix-dashboard/src/node/.gitignore
index fc1e2ce..143881f1 100755
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/.gitignore
+++ b/asterixdb/asterix-dashboard/src/node/.gitignore
@@ -9,6 +9,7 @@
 /documents
 # /static
 /dist
+/static
 
 # IDEs and editors
 /.idea
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/README.md b/asterixdb/asterix-dashboard/src/node/README.md
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/README.md
rename to asterixdb/asterix-dashboard/src/node/README.md
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.e2e-spec.ts b/asterixdb/asterix-dashboard/src/node/e2e/app.e2e-spec.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.e2e-spec.ts
rename to asterixdb/asterix-dashboard/src/node/e2e/app.e2e-spec.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.po.ts b/asterixdb/asterix-dashboard/src/node/e2e/app.po.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/app.po.ts
rename to asterixdb/asterix-dashboard/src/node/e2e/app.po.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/tsconfig.e2e.json b/asterixdb/asterix-dashboard/src/node/e2e/tsconfig.e2e.json
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/e2e/tsconfig.e2e.json
rename to asterixdb/asterix-dashboard/src/node/e2e/tsconfig.e2e.json
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/karma.conf.js b/asterixdb/asterix-dashboard/src/node/karma.conf.js
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/karma.conf.js
rename to asterixdb/asterix-dashboard/src/node/karma.conf.js
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json b/asterixdb/asterix-dashboard/src/node/package.json
similarity index 92%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json
rename to asterixdb/asterix-dashboard/src/node/package.json
index 3073159..9aa8a0d 100755
--- a/asterixdb/asterix-dashboard/src/main/resources/dashboard/package.json
+++ b/asterixdb/asterix-dashboard/src/node/package.json
@@ -5,13 +5,15 @@
   "scripts": {
     "ng": "ng",
     "start": "ng serve --proxy-config proxy.config.js --host 0.0.0.0",
-    "build": "ng build",
+    "build": "ng build --prod",
+    "mavenbuild": "node node_modules/.bin/ng build --prod -op static/",
     "test": "ng test",
     "lint": "ng lint",
     "e2e": "ng e2e"
   },
   "private": true,
   "dependencies": {
+    "@angular-devkit/core": "^0.6.1",
     "@angular/animations": "^5.0.3",
     "@angular/cdk": "^5.0.0-rc.2",
     "@angular/common": "^5.0.3",
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/protractor.conf.js b/asterixdb/asterix-dashboard/src/node/protractor.conf.js
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/protractor.conf.js
rename to asterixdb/asterix-dashboard/src/node/protractor.conf.js
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/proxy.config.js b/asterixdb/asterix-dashboard/src/node/proxy.config.js
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/proxy.config.js
rename to asterixdb/asterix-dashboard/src/node/proxy.config.js
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app-config.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/app-config.service.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app-config.service.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/app-config.service.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.html b/asterixdb/asterix-dashboard/src/node/src/app/app.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/app.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/app.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/app.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/app.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/app.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.module.ts b/asterixdb/asterix-dashboard/src/node/src/app/app.module.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/app.module.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/app.module.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/appbar.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/apptab.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/codemirror-metadata.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/input-metadata.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/metadata/metadata-container.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/codemirror.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/input.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/metadata.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/ouput.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/ouput.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/output.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts b/asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/dashboard/query/query-container.component.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/db.ts b/asterixdb/asterix-dashboard/src/node/src/app/db.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/db.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/db.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts b/asterixdb/asterix-dashboard/src/node/src/app/material.module.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/material.module.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/material.module.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/app.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/app.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataset.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataset.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/datatype.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/datatype.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataverse.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/dataverse.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/index.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/index.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/metadata.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/metadata.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/actions/query.actions.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/actions/query.actions.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataset.effects.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataset.effects.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/datatype.effects.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/effects/datatype.effects.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataverse.effects.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/effects/dataverse.effects.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/index.effects.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/effects/index.effects.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/metadata.effects.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/effects/metadata.effects.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/effects/query.effects.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/effects/query.effects.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/models/asterixDB.model.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/models/asterixDB.model.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/keys.pipe.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/keys.pipe.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectArrayType.pipe.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectArrayType.pipe.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectType.pipe.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/pipes/objectType.pipe.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/app.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/app.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataset.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataset.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/datatype.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/datatype.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataverse.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/dataverse.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/index.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/index.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/metadata.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/metadata.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query-metadata.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query-metadata.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query.reducer.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/reducers/query.reducer.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/app-core.service.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/services/app-core.service.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-metadata.service.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-metadata.service.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts b/asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-query.service.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts
rename to asterixdb/asterix-dashboard/src/node/src/app/shared/services/async-query.service.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/assets/asterixdb_tm.png b/asterixdb/asterix-dashboard/src/node/src/assets/asterixdb_tm.png
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/assets/asterixdb_tm.png
rename to asterixdb/asterix-dashboard/src/node/src/assets/asterixdb_tm.png
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.prod.ts b/asterixdb/asterix-dashboard/src/node/src/environments/environment.prod.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.prod.ts
rename to asterixdb/asterix-dashboard/src/node/src/environments/environment.prod.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.ts b/asterixdb/asterix-dashboard/src/node/src/environments/environment.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/environments/environment.ts
rename to asterixdb/asterix-dashboard/src/node/src/environments/environment.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/favicon.ico b/asterixdb/asterix-dashboard/src/node/src/favicon.ico
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/favicon.ico
rename to asterixdb/asterix-dashboard/src/node/src/favicon.ico
Binary files differ
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/index.html b/asterixdb/asterix-dashboard/src/node/src/index.html
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/index.html
rename to asterixdb/asterix-dashboard/src/node/src/index.html
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.scss b/asterixdb/asterix-dashboard/src/node/src/main.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.scss
rename to asterixdb/asterix-dashboard/src/node/src/main.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.ts b/asterixdb/asterix-dashboard/src/node/src/main.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/main.ts
rename to asterixdb/asterix-dashboard/src/node/src/main.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/polyfills.ts b/asterixdb/asterix-dashboard/src/node/src/polyfills.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/polyfills.ts
rename to asterixdb/asterix-dashboard/src/node/src/polyfills.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_constants.scss b/asterixdb/asterix-dashboard/src/node/src/styles/_constants.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_constants.scss
rename to asterixdb/asterix-dashboard/src/node/src/styles/_constants.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_general.scss b/asterixdb/asterix-dashboard/src/node/src/styles/_general.scss
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/styles/_general.scss
rename to asterixdb/asterix-dashboard/src/node/src/styles/_general.scss
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/test.ts b/asterixdb/asterix-dashboard/src/node/src/test.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/test.ts
rename to asterixdb/asterix-dashboard/src/node/src/test.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.app.json b/asterixdb/asterix-dashboard/src/node/src/tsconfig.app.json
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.app.json
rename to asterixdb/asterix-dashboard/src/node/src/tsconfig.app.json
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.spec.json b/asterixdb/asterix-dashboard/src/node/src/tsconfig.spec.json
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/tsconfig.spec.json
rename to asterixdb/asterix-dashboard/src/node/src/tsconfig.spec.json
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/src/typings.d.ts b/asterixdb/asterix-dashboard/src/node/src/typings.d.ts
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/src/typings.d.ts
rename to asterixdb/asterix-dashboard/src/node/src/typings.d.ts
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/tsconfig.json b/asterixdb/asterix-dashboard/src/node/tsconfig.json
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/tsconfig.json
rename to asterixdb/asterix-dashboard/src/node/tsconfig.json
diff --git a/asterixdb/asterix-dashboard/src/main/resources/dashboard/tslint.json b/asterixdb/asterix-dashboard/src/node/tslint.json
similarity index 100%
rename from asterixdb/asterix-dashboard/src/main/resources/dashboard/tslint.json
rename to asterixdb/asterix-dashboard/src/node/tslint.json
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index fd6dd79..d014d2b 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -54,11 +54,36 @@
         </executions>
       </plugin>
       <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.7</version>
+        <executions>
+          <execution>
+            <id>copy-license</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${basedir}/../src/main/licenses/templates/</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../asterix-dashboard/src/node/static/
+                  </directory>
+                  <includes>
+                    <include>3rdpartylicenses.txt</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <groupId>org.apache.hyracks</groupId>
         <artifactId>license-automation-plugin</artifactId>
         <executions>
           <execution>
-            <phase>generate-resources</phase>
+            <phase>prepare-package</phase>
             <goals>
               <goal>generate</goal>
             </goals>
@@ -146,6 +171,11 @@
           </overrides>
           <licenses>
             <license>
+                <displayName>Various 3rd party</displayName>
+                <url>file://${basedir}}/../asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt</url>
+                <contentFile>${basedir}}/../asterix-dashboard/src/main/resources/dashboard/static/3rdpartylicenses.txt</contentFile>
+            </license>
+            <license>
               <displayName>a BSD 3-clause license</displayName>
               <url>http://asm.objectweb.org/license.html</url>
             </license>
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 0520519..a56ffd8 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -245,6 +245,7 @@
           </checkstyleRules>
           <includes>**/*.java,**/*.jj</includes>
           <resourceIncludes>**/*.properties,**/*.xml,**/*.xsd,**/*.aql,**/*.sqlpp,**/*.sh</resourceIncludes>
+          <resourceExcludes>**/node_modules/**/*</resourceExcludes>
           <sourceDirectories>${project.build.sourceDirectory},${project.build.testSourceDirectory}</sourceDirectories>
         </configuration>
       </plugin>
diff --git a/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt b/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt
new file mode 100644
index 0000000..2c3d11d
--- /dev/null
+++ b/asterixdb/src/main/licenses/templates/3rdpartylicenses.txt
@@ -0,0 +1,373 @@
+core-js@2.5.6
+MIT
+Copyright (c) 2014-2018 Denis Pushkarev
+
+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.
+
+primeng@4.3.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 PrimeTek
+
+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.
+
+@angular/forms@5.2.10
+MIT
+MIT
+
+@ngrx/store@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+@angular/core@5.2.10
+MIT
+MIT
+
+webpack@3.8.1
+MIT
+Copyright JS Foundation and other contributors
+
+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.
+
+@angular/platform-browser@5.2.10
+MIT
+MIT
+
+zone.js@0.8.26
+MIT
+The MIT License
+
+Copyright (c) 2016-2018 Google, Inc.
+
+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.
+
+@angular/router@5.2.10
+MIT
+MIT
+
+@angular/common@5.2.10
+MIT
+MIT
+
+file-saver@1.3.8
+MIT
+The MIT License
+
+Copyright © 2016 [Eli Grey][1].
+
+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.
+
+  [1]: http://eligrey.com
+
+@types/file-saver@1.3.0
+MIT
+MIT License
+
+    Copyright (c) Microsoft Corporation. All rights reserved.
+
+    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
+
+css-loader@0.28.11
+MIT
+Copyright JS Foundation and other contributors
+
+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.
+
+@angular/cdk@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+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.
+
+@angular/material@5.2.5
+MIT
+The MIT License
+
+Copyright (c) 2018 Google LLC.
+
+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.
+
+@ngrx/effects@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+@ngrx/db@2.1.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2015 ngrx
+
+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.
+
+@ngrx/store-devtools@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+codemirror@5.37.0
+MIT
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+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.
+
+@angular/animations@5.2.10
+MIT
+MIT
+
+hammerjs@2.0.8
+MIT
+The MIT License (MIT)
+
+Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
+
+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.
+
+@angular/platform-browser-dynamic@5.2.10
+MIT
+MIT
\ No newline at end of file
diff --git a/asterixdb/src/main/licenses/templates/asterix-license.ftl b/asterixdb/src/main/licenses/templates/asterix-license.ftl
index c93a2be..bf2c7ea 100644
--- a/asterixdb/src/main/licenses/templates/asterix-license.ftl
+++ b/asterixdb/src/main/licenses/templates/asterix-license.ftl
@@ -63,6 +63,18 @@
    </#if>
 ---
 </#list>
+
+<#if !asterixDashboardSkip!false>
+===
+   ASTERIXDB Dashboard JS COMPONENTS:
+
+    includes a number of packed subcomponents under
+    dashboard/static/ with separate copyright
+    notices and license terms. Your use of these subcomponents is subject
+    to the terms and condition of the following licenses.
+===
+<#include "3rdpartylicenses.txt">
+</#if>
 ===
    AsterixDB includes source code with separate copyright notices and
    license terms. Your use of this source code is subject to the terms
diff --git a/asterixdb/src/main/licenses/templates/source_licenses.ftl b/asterixdb/src/main/licenses/templates/source_licenses.ftl
index 7970221..cc3e767 100644
--- a/asterixdb/src/main/licenses/templates/source_licenses.ftl
+++ b/asterixdb/src/main/licenses/templates/source_licenses.ftl
@@ -138,698 +138,3 @@
 Source files in asterix-hivecompat are derived from portions of Apache Hive Query Language v0.13.0 (org.apache.hive:hive-exec).
     </@license>
 </#if>
-<#if !asterixDashboardSkip!false>
-    <#assign licenseComponent="AsterixDB Dashboard"/>
-    <#assign licenseLocation="${asterixDashboardLocation!}"/>
-    <#assign licenseFilePrefix="${asterixDashboardResourcesPrefix!}"/>
-    <@license files=[
-        "dashboard/src/app/dashboard/query/output.component.ts",
-        "dashboard/static"]
-     component="File Saver portions of the AsterixDB Dashboard"
-     licenseName="The MIT license ">
-The MIT License
-
-Copyright © 2016 Eli Grey.
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/metadata/",
-        "dashboard/src/app/dashboard/metadata/datasets-collection/",
-        "dashboard/src/app/dashboard/metadata/datatypes-collection/",
-        "dashboard/src/app/dashboard/metadata/dataverses-collection/",
-        "dashboard/src/app/dashboard/query/",
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/",
-        "dashboard/static"]
-     component="ReactiveX/rxjs"
-     licenseName="Apache License 2.0">
-                               Apache License
-                         Version 2.0, January 2004
-                      http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
-    "License" shall mean the terms and conditions for use, reproduction,
-    and distribution as defined by Sections 1 through 9 of this document.
-
-    "Licensor" shall mean the copyright owner or entity authorized by
-    the copyright owner that is granting the License.
-
-    "Legal Entity" shall mean the union of the acting entity and all
-    other entities that control, are controlled by, or are under common
-    control with that entity. For the purposes of this definition,
-    "control" means (i) the power, direct or indirect, to cause the
-    direction or management of such entity, whether by contract or
-    otherwise, or (ii) ownership of fifty percent (50%) or more of the
-    outstanding shares, or (iii) beneficial ownership of such entity.
-
-    "You" (or "Your") shall mean an individual or Legal Entity
-    exercising permissions granted by this License.
-
-    "Source" form shall mean the preferred form for making modifications,
-    including but not limited to software source code, documentation
-    source, and configuration files.
-
-    "Object" form shall mean any form resulting from mechanical
-    transformation or translation of a Source form, including but
-    not limited to compiled object code, generated documentation,
-    and conversions to other media types.
-
-    "Work" shall mean the work of authorship, whether in Source or
-    Object form, made available under the License, as indicated by a
-    copyright notice that is included in or attached to the work
-    (an example is provided in the Appendix below).
-
-    "Derivative Works" shall mean any work, whether in Source or Object
-    form, that is based on (or derived from) the Work and for which the
-    editorial revisions, annotations, elaborations, or other modifications
-    represent, as a whole, an original work of authorship. For the purposes
-    of this License, Derivative Works shall not include works that remain
-    separable from, or merely link (or bind by name) to the interfaces of,
-    the Work and Derivative Works thereof.
-
-    "Contribution" shall mean any work of authorship, including
-    the original version of the Work and any modifications or additions
-    to that Work or Derivative Works thereof, that is intentionally
-    submitted to Licensor for inclusion in the Work by the copyright owner
-    or by an individual or Legal Entity authorized to submit on behalf of
-    the copyright owner. For the purposes of this definition, "submitted"
-    means any form of electronic, verbal, or written communication sent
-    to the Licensor or its representatives, including but not limited to
-    communication on electronic mailing lists, source code control systems,
-    and issue tracking systems that are managed by, or on behalf of, the
-    Licensor for the purpose of discussing and improving the Work, but
-    excluding communication that is conspicuously marked or otherwise
-    designated in writing by the copyright owner as "Not a Contribution."
-
-    "Contributor" shall mean Licensor and any individual or Legal Entity
-    on behalf of whom a Contribution has been received by Licensor and
-    subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
-    this License, each Contributor hereby grants to You a perpetual,
-    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-    copyright license to reproduce, prepare Derivative Works of,
-    publicly display, publicly perform, sublicense, and distribute the
-    Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
-    this License, each Contributor hereby grants to You a perpetual,
-    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-    (except as stated in this section) patent license to make, have made,
-    use, offer to sell, sell, import, and otherwise transfer the Work,
-    where such license applies only to those patent claims licensable
-    by such Contributor that are necessarily infringed by their
-    Contribution(s) alone or by combination of their Contribution(s)
-    with the Work to which such Contribution(s) was submitted. If You
-    institute patent litigation against any entity (including a
-    cross-claim or counterclaim in a lawsuit) alleging that the Work
-    or a Contribution incorporated within the Work constitutes direct
-    or contributory patent infringement, then any patent licenses
-    granted to You under this License for that Work shall terminate
-    as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
-    Work or Derivative Works thereof in any medium, with or without
-    modifications, and in Source or Object form, provided that You
-    meet the following conditions:
-
-    (a) You must give any other recipients of the Work or
-        Derivative Works a copy of this License; and
-
-    (b) You must cause any modified files to carry prominent notices
-        stating that You changed the files; and
-
-    (c) You must retain, in the Source form of any Derivative Works
-        that You distribute, all copyright, patent, trademark, and
-        attribution notices from the Source form of the Work,
-        excluding those notices that do not pertain to any part of
-        the Derivative Works; and
-
-    (d) If the Work includes a "NOTICE" text file as part of its
-        distribution, then any Derivative Works that You distribute must
-        include a readable copy of the attribution notices contained
-        within such NOTICE file, excluding those notices that do not
-        pertain to any part of the Derivative Works, in at least one
-        of the following places: within a NOTICE text file distributed
-        as part of the Derivative Works; within the Source form or
-        documentation, if provided along with the Derivative Works; or,
-        within a display generated by the Derivative Works, if and
-        wherever such third-party notices normally appear. The contents
-        of the NOTICE file are for informational purposes only and
-        do not modify the License. You may add Your own attribution
-        notices within Derivative Works that You distribute, alongside
-        or as an addendum to the NOTICE text from the Work, provided
-        that such additional attribution notices cannot be construed
-        as modifying the License.
-
-    You may add Your own copyright statement to Your modifications and
-    may provide additional or different license terms and conditions
-    for use, reproduction, or distribution of Your modifications, or
-    for any such Derivative Works as a whole, provided Your use,
-    reproduction, and distribution of the Work otherwise complies with
-    the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
-    any Contribution intentionally submitted for inclusion in the Work
-    by You to the Licensor shall be under the terms and conditions of
-    this License, without any additional terms or conditions.
-    Notwithstanding the above, nothing herein shall supersede or modify
-    the terms of any separate license agreement you may have executed
-    with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
-    names, trademarks, service marks, or product names of the Licensor,
-    except as required for reasonable and customary use in describing the
-    origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
-    agreed to in writing, Licensor provides the Work (and each
-    Contributor provides its Contributions) on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-    implied, including, without limitation, any warranties or conditions
-    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-    PARTICULAR PURPOSE. You are solely responsible for determining the
-    appropriateness of using or redistributing the Work and assume any
-    risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
-    whether in tort (including negligence), contract, or otherwise,
-    unless required by applicable law (such as deliberate and grossly
-    negligent acts) or agreed to in writing, shall any Contributor be
-    liable to You for damages, including any direct, indirect, special,
-    incidental, or consequential damages of any character arising as a
-    result of this License or out of the use or inability to use the
-    Work (including but not limited to damages for loss of goodwill,
-    work stoppage, computer failure or malfunction, or any and all
-    other commercial damages or losses), even if such Contributor
-    has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
-    the Work or Derivative Works thereof, You may choose to offer,
-    and charge a fee for, acceptance of support, warranty, indemnity,
-    or other liability obligations and/or rights consistent with this
-    License. However, in accepting such obligations, You may act only
-    on Your own behalf and on Your sole responsibility, not on behalf
-    of any other Contributor, and only if You agree to indemnify,
-    defend, and hold each Contributor harmless for any liability
-    incurred by, or claims asserted against, such Contributor by reason
-    of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
-    To apply the Apache License to your work, attach the following
-    boilerplate notice, with the fields enclosed by brackets "[]"
-    replaced with your own identifying information. (Don't include
-    the brackets!)  The text should be enclosed in the appropriate
-    comment syntax for the file format. We also recommend that a
-    file or class name and description of purpose be included on the
-    same "printed page" as the copyright notice for easier
-    identification within third-party archives.
-
- Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
-limitations under the License.
-    </@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/query/output.component.ts",
-        "dashboard/src/app/dashboard/query/output.component.html",
-        "dashboard/src/app/dashboard/query/output.component.scss",
-        "dashboard/src/app/dashboard/query/metadata.component.ts",
-        "dashboard/src/app/dashboard/query/metadata.component.html",
-        "dashboard/src/app/dashboard/query/metadata.component.scss",
-        "dashboard/static"]
-     component="PrimeNG components of the AsterixDB dashboard"
-     licenseName="The MIT License">
-The MIT License (MIT)
-
-Copyright (c) 2016-2017 PrimeTek
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/metadata/",
-        "dashboard/src/app/dashboard/metadata/datasets-collection/",
-        "dashboard/src/app/dashboard/metadata/datatypes-collection/",
-        "dashboard/src/app/dashboard/metadata/dataverses-collection/",
-        "dashboard/src/app/dashboard/query/",
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/",
-        "dashboard/static/main.37b7b7cad656490b195a.bundle.js",
-        "dashboard/static/styles.9f50282210bba5318775.bundle",
-        "dashboard/static/scripts.da68998bdd77aff4e764.bundle.js",
-        "dashboard/static/polyfills.32ca5670d6503e090789.bundle.js",
-        "dashboard/static/inline.66bd6b83f86cf773a001.bundle.js",
-        "dashboard/static/index.html"]
-     component="NGRX portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-The MIT License (MIT)
-
-Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/query/input.component.ts",
-        "dashboard/src/app/dashboard/query/input.component.html",
-        "dashboard/src/app/dashboard/query/input.component.scss",
-        "dashboard/src/app/dashboard/query/codemirror.component.ts",
-        "dashboard/src/app/dashboard/query/codemirror.component.scss",
-        "dashboard/src/app/dashboard/metadata/input-metadata.component.ts",
-        "dashboard/src/app/dashboard/metadata/input-metadata.component.html",
-        "dashboard/src/app/dashboard/metadata/input-metadata.component.scss",
-        "dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts",
-        "dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss",
-        "dashboard/static"]
-     component="Codemirror portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/",
-        "dashboard/static"]
-     component="AngularJS portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-The MIT License
-
-Copyright (c) 2014-2017 Google, Inc. http://angular.io
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/app/dashboard/",
-        "dashboard/src/app/material.module.ts",
-        "dashboard/src/main.ts",
-        "dashboard/static"]
-     component="Angular Material and HammerJS portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-Copyright (c) 2017 Google LLC.
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/",
-        "dashboard/static"]
-     component="CoreJS portions of the AsterixDB dashboard"
-     licenseName="The MIT License">
-Copyright (c) 2014-2017 Denis Pushkarev
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/index.html",
-        "dashboard/static"]
-    component="Roboto Font portions of the AsterixDB dashboard"
-    licenseName="Apache License 2.0">
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-limitations under the License.</@license>
-<@license files=[
-"dashboard/src/index.html",
-"dashboard/static/index.html"]
- component="Font Awesome portions of the AsterixDB dashboard"
- licenseName="The MIT License">
-
-    http://fontawesome.io/license/ Applies to all CSS and LESS files in the
-    following directories if exist: font-awesome/css/, font-awesome/less/, and
-    font-awesome/scss/.  and downloaded from CDN network services and loaded in
-    index.html License: MIT License URL:
-    http://opensource.org/licenses/mit-license.html
-
-</@license>
-<@license files=["dashboard/"]
- component="webpack portions of the AsterixDB dashboard"
- licenseName="The MIT License">
-Copyright JS Foundation and other contributors
-
-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.
-    </@license>
-    <@license files=[
-        "dashboard/src/",
-        "dashboard/static"]
-    component="zonejs portions of the AsterixDB dashboard"
-    licenseName="The MIT License">
-Copyright (c) 2016 Google, Inc.
-
-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.
-    </@license>
-</#if>
